2016-10-26 4 views
2

В версии 1 Docker Compose файл /etc/hosts обновляется связанными контейнерами. Например.Docker Compose впрыскиваемые контейнеры в v2

$ cat /etc/hosts 
127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.17.0.2 redis redis_1 c381c79fb9c2 romantic_yonath 
172.17.0.3 48d2ed7033a1 

Однако в v2 это делается через DNS, поэтому записей больше нет. Я мог бы использовать таблицу hosts для загрузки балансировки нагрузки; очень полезно при использовании в сочетании с командой scale.

Существуют ли какие-либо методы для их инъекции при создании контейнера?

+1

Встроенный DNS будет делать циклическим перебором балансировки нагрузки. Будет ли это достаточно хорошо для того, что вам нужно, или вам нужно что-то другое? – R0MANARMY

+0

Я не верю, что DNS делает круговое движение. Я создал пример здесь: https://github.com/joedborg/docker-compose-scaling, что, я думаю, доказывает это? – jdborg

+0

Я пошел на их [docs] (https://docs.docker.com/docker-cloud/apps/service-links/#/discovering-containers-on-the-same-service-or-stack) – R0MANARMY

ответ

1

Nginx blog имеет этот пост на Using DNS for Service Discovery with NGINX and NGINX Plus.

NGINX кэширует записи DNS до следующего перезагрузки или перезагрузки конфигурации, игнорируя значения TTL записей.

Объясняет, что вы видели, после перезапуска контейнера вы можете перенаправить на новые узлы.

Раздел Установка имени домена в переменной имеет пример обходного пути для кэширования при запуске.

resolver 10.0.0.2 valid=10s; 

server { 
    location/{ 
     set $backend_servers backends.example.com; 
     proxy_pass http://$backend_servers:8080; 
    } 
} 

При использовании переменной, чтобы указать имя домена в директиве proxy_pass, NGINX повторно разрешает имя домена, когда истечет срок его TTL.

This discussion предполагает 127.0.0.11 будет IP-резольвера внутри контейнера.


Я использовал эту конфигурацию локально, чтобы подтвердить изменения DNS отражаются после масштабирования, и это, кажется, работает

resolver 127.0.0.11 valid=5s; 

server { 
    listen 80; 
    location/{ 
     set $application_servers application; 
     proxy_pass http://$application_servers:8080; 
    } 
} 
+0

Удивительная находка. Я обновлю пример, чтобы увидеть, могу ли я заставить его работать. – jdborg

Смежные вопросы