web-dev-qa-db-ja.com

同じDockerネットワーク上のコンテナーにホスト名を追加するにはどうすればよいですか?

2つのコンテナーを含むdocker composeファイルがあるとします。どちらも/ etc/hostsファイルで相互に参照します。コンテナーAにはコンテナーBの参照があり、その逆も同様です。そして、これらすべてが自動的に行われます。次に、AのホストファイルのBに1つ以上のホスト名を追加します。これを行うにはどうすればよいですか? Docker Composeでこれを実現する特別な方法はありますか?

例:

172.0.10.166 service-b my-custom-hostname

12
saada

はい。作成ファイルで ネットワークエイリアス を指定できます。

services:
  db:
    networks:
      default:
        aliases:
          - database
          - postgres

この例では、dbサービスは、dbdatabase、またはpostgresを使用して、デフォルトネットワーク上の他のコンテナーから到達できます。

実行中のコンテナにエイリアスを追加するdocker network connectコマンドと--alias=オプション。

16
Steve

Docker composeには extra_hosts 機能があり、コンテナーのホストファイルにエントリを追加できます。

docker-compose.yml

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
3
Mark O'Connor

私があなたの質問を正しく理解している場合は、--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の詳細はこちら:

http://docs.docker.com/v1.8/reference/commandline/run/

0
Bloodysock