docker-compose
を使用して、約5つの異なるコンテナーで構成されるテスト環境を実行しています。コンテナー間のリンクと共有ボリューム(volumes-from)は、すばらしい機能を発揮します。また、いくつかのポートをホストマシンに公開します。これはうまく機能します。
私が欠けているのは、IPアドレスをハードコーディングせずに、実際のサーバーの一部をこの環境にリンクする方法です。 docker run
を使用すると、--add-Host
を使用して/etc/hosts
ファイルに別の行を追加できます。 docker-composeで似たようなことをする方法はありますか?
素晴らしいニュースがあります:これはCompose 1.3になります!
私はこれを現在のRC(RC1)で次のように使用しています:
rng:
build: rng
extra_hosts:
seed: 1.2.3.4
tree: 4.3.2.1
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
これはComposeの機能バックログにありますが、まだ作業が開始されていないようです。 Githubの問題
次のようにできるようにする必要があるようです:
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アドレスを変更するためにコンテナバウンスを必要とするでしょう。