Docker-compose.ymlファイルには、次のものがあります。ただし、コンテナはホスト名の値を取得しません。何か案は?
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
docker run
を使用しているときに、ホスト名が他のコンテナーから見えないことがわかりました。これは 既知の問題 (おそらく既知の機能)であることが判明しました。
ホスト名の使用に関する警告をドキュメントに追加する必要があります。それはめったに役に立たないと思います。
ホスト名を割り当てる正しい方法-コンテナネットワーキングの観点から-は、 define a alias のようになります:
services:
some-service:
networks:
some-network:
aliases:
- alias1
- alias2
残念ながら、このstillはdocker run
では機能しません。回避策は、コンテナに名前を割り当てることです。
docker-compose run --name alias1 some-service
そして、alias1
は他のコンテナからpingできます。
これは正常に動作するようです。あなたの設定をファイルに入れた場合:
$ cat > compose.yml <<EOF
dns:
image: phensley/docker-dns
hostname: affy
domainname: affy.com
volumes:
- /var/run/docker.sock:/docker.sock
EOF
そして、物事を持ち出します:
$ docker-compose -f compose.yml up
Creating tmp_dns_1...
Attaching to tmp_dns_1
dns_1 | 2015-04-28T17:47:45.423387 [dockerdns] table.add tmp_dns_1.docker -> 172.17.0.5
そして、コンテナ内のホスト名を確認すると、すべてがうまくいくようです:
$ docker exec -it stack_dns_1 hostname
affy.affy.com
ドッカーのドキュメントに基づいています: https://docs.docker.com/compose/compose-file/#/command
単にdocker-composeファイルにhostname: <string>
を配置します。
例えば。:
[...]
lb01:
hostname: at-lb01
image: at-client-base:v1
[...]
コンテナlb01はat-lb01
をホスト名として取得します。
Kdcを機能させるには freeipa container をスピンする必要があり、実行しない場合はホスト名を指定する必要がありました。最終的に私にとってうまくいったのは、composeでHOSTNAME
env変数を設定することです:
version: 2
services:
freeipa:
environment:
- HOSTNAME=ipa.example.test
動作するようになりました:
docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
私が見つけた最も簡単な方法は、docker-compose.yml
でコンテナ名を設定することです。 container_name ドキュメントを参照してください。 docker-compose v1 +に適用できます。ホストマシンからコンテナではなく、コンテナからコンテナに対して機能します。
services:
dns:
image: phensley/docker-dns
container_name: affy
これで、コンテナ名を使用して他のコンテナからaffy
にアクセスできるはずです。開発環境で複数のredisサーバーに対してこれを行う必要がありました。
NOTEこのソリューションは、スケーリングする必要がない限り機能します。一貫した個々の開発者環境など。