2つのコンテナーを含むdocker composeファイルがあるとします。どちらも/ etc/hostsファイルで相互に参照します。コンテナーAにはコンテナーBの参照があり、その逆も同様です。そして、これらすべてが自動的に行われます。次に、AのホストファイルのBに1つ以上のホスト名を追加します。これを行うにはどうすればよいですか? Docker Composeでこれを実現する特別な方法はありますか?
例:
172.0.10.166 service-b my-custom-hostname
はい。作成ファイルで ネットワークエイリアス を指定できます。
services:
db:
networks:
default:
aliases:
- database
- postgres
この例では、db
サービスは、db
、database
、またはpostgres
を使用して、デフォルトネットワーク上の他のコンテナーから到達できます。
実行中のコンテナにエイリアスを追加するdocker network connect
コマンドと--alias=
オプション。
Docker composeには extra_hosts 機能があり、コンテナーのホストファイルにエントリを追加できます。
web1:
image: Tomcat:8.0
ports:
- 8081:8080
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
web2:
image: Tomcat:8.0
ports:
- 8082:8080
web3:
image: Tomcat:8.0
ports:
- 8083:8080
新しい docker 1.9ネットワーク機能 を使用してdocker composeを実行します。
$ docker-compose --x-networking up -d
Starting tmp_web1_1
Starting tmp_web2_1
Starting tmp_web3_1
そして、最初のコンテナのhostsファイルを見てください。他のコンテナと追加のカスタムエントリを表示します。
$ docker exec tmp_web1_1 cat /etc/hosts
..
172.18.0.4 web1
172.18.0.2 tmp_web2_1
172.18.0.3 tmp_web3_1
50.31.209.229 otherhost
162.242.195.82 somehost
私があなたの質問を正しく理解している場合は、--add-Hostフラグを使用して、ホストの/ etc/hostsファイルで参照されているホスト名を渡すことができます。
$ docker run ... --add-Host="droid"
ホストの/ etc/hostsには次のエントリが必要です:xx.xx.xx.xx droid
もちろん、xx.xx.xx.xxは、「docker run」コマンドを使用して開始したコンテナー内から到達可能である必要があります。 1つ以上の--add-Host = "xyz"を指定できます。
--add-Hostの詳細はこちら: