2016-10-26 5 views
2

Docker Composeのv1では、/etc/hostsファイルがリンクされたコンテナで更新されます。例えば。Docker 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経由で行われるため、これ以上エントリはありません。ホストテーブルを使用してロードバランサをブートストラップすることができます。 scaleコマンドと組み合わせて使用​​すると非常に便利です。

コンテナの作成中にこれらを挿入する方法はありますか?

+1

は、ラウンドロビン・ロード・バランシングを行います動作するようです。あなたが必要とするものに十分なものか、何か違うものが必要なのでしょうか? – 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ブログはUsing DNS for Service Discovery with NGINX and NGINX Plusにこの記事を掲載しています。

NGINXは、レコードのTTL値を無視して、次回の再起動または構成のリロードまでDNSレコードをキャッシュします。

コンテナを再起動した後、新しいノードにルーティングできることを説明しています。

セクション変数にドメイン名を設定するには、起動時にキャッシュするための回避策の例があります。

resolver 10.0.0.2 valid=10s; 

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

あなたはproxy_passディレクティブでドメイン名を指定する変数を使用する場合、そのTTLが期限切れになったときに、nginxのは、ドメイン名を再解決されます。

This discussionが表示されます127.0.0.11は、コンテナ内のリゾルバのIPになります。


私は、DNSの変更は、スケーリング後に反映されている確認するために、ローカルにこの設定を使用し、DNSに建てられ

resolver 127.0.0.11 valid=5s; 

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

すばらしい見つける。この例を更新して、それを動作させることができるかどうかを確認します。 – jdborg

関連する問題