web-dev-qa-db-ja.com

docker-composeで--add-Hostまたはextra_hostsを使用する

docker-composeを使用して、約5つの異なるコンテナーで構成されるテスト環境を実行しています。コンテナー間のリンクと共有ボリューム(volumes-from)は、すばらしい機能を発揮します。また、いくつかのポートをホストマシンに公開します。これはうまく機能します。

私が欠けているのは、IPアドレスをハードコーディングせずに、実際のサーバーの一部をこの環境にリンクする方法です。 docker runを使用すると、--add-Hostを使用して/etc/hostsファイルに別の行を追加できます。 docker-composeで似たようなことをする方法はありますか?

45
Pieter

素晴らしいニュースがあります:これはCompose 1.3になります!

私はこれを現在のRC(RC1)で次のように使用しています:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1
50
jpetazzo

https://docs.docker.com/compose/compose-file/#extra_hosts

extra_hosts-ホスト名マッピングを追加します。 docker client --add-Hostパラメーターと同じ値を使用します。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

IPアドレスとホスト名を含むエントリが、このサービスのコンテナ内の/ etc/hosts>に作成されます。例:

162.242.195.82  somehost
50.31.209.229   otherhost
45
oneklc

これはComposeの機能バックログにありますが、まだ作業が開始されていないようです。 Githubの問題

1
Kevan Ahlquist

次のようにできるようにする必要があるようです:

extra_hosts:
 - "loghost:localhost"

そのため、コロンの後の部分(通常はIPアドレス)が数字で始まらない場合、名前解決が実行されてlocalhostのIPが検索され、コンテナーの/ etc/hostsのようなものが追加されます。

127.0.0.1 loghost

... localhostがホストシステムで127.0.0.1に解決されると仮定します。

Docker-composeのソースコードに追加するのは本当に簡単だと思われます。compose/ config/types.pyのparse_extra_hosts関数で追加できそうです。

Docker自体の場合、これはおそらくopts/hosts.goのValidateExtraHost関数に追加できますが、厳密には検証されなくなっているため、関数の名前が少し間違っています。

実際には、これをdocker-composeではなくdockerに追加する方が良いかもしれません-docker-composeは、dockerが取得した場合に自動的に取得するだけです。

悲しいことに、これはおそらくIPアドレスを変更するためにコンテナバウンスを必要とするでしょう。

0
dstromberg