docker-composeでホスト名を設定するにはどうすればよいですか?


120

私のdocker-compose.ymlファイルには、以下があります。ただし、コンテナはホスト名の値を取得しません。何か案は?

dns:
  image: phensley/docker-dns
  hostname: affy
  domainname: affy.com
  volumes:
    - /var/run/docker.sock:/docker.sock

コンテナのホスト名を確認しても、ピックアップされませんaffy


1
使用しているComposeのバージョンは何ですか?
小次郎2015

回答:



57

これは正常に動作するようです。私があなたの設定をファイルに入れたら:

$ 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

1
使用しているComposeのバージョンは何ですか?
小次郎2015

この形式は、最新バージョンのdocker-composeでは機能しません。YMLファイルは厄介なものです。これがDNSに適した形式ですか?
ジョージストッカー2015年

3
YMLファイルは実際にはそれほど面倒ではありません。「機能しない」とはどういう意味ですか?よると、ドキュメント、両方hostnamedomainname有効なdocker-compose.ymlオプション。更新:テスト済みですが、問題なく動作するようです(docker-composeバージョン1.4.2、dockerバージョン1.8.2)。
larsk、2015年

このホスト名をドッカー環境の外に公開する方法はありますか?ホストがdns名でdockerコンテナーにアクセスできると便利です。
Paul Praet

1
それは可能であり、おそらくそれ自体の質問に値します。「docker dns」を検索すると、いくつかの関連する結果が見つかります。最初に何があるか見てみましょう。
larskは、

53

を使用すると、ホスト名が他のコンテナから見えないことがわかりましたdocker run。これは既知の問題(おそらくより既知の機能)であることが判明しました。

おそらく、ホスト名の使用に関する警告をドキュメントに追加する必要があります。めったに役に立たないと思います。

ホスト名を割り当てる正しい方法-コンテナネットワークの観点から-のようにエイリアス定義することです:

services:
  some-service:
    networks:
      some-network:
        aliases:
          - alias1
          - alias2

残念ながら、これはまだ動作しませんdocker run。回避策は、コンテナに名前を割り当てることです。

docker-compose run --name alias1 some-service

そして、alias1その後、他のコンテナからpingすることができます。


11
他のコンテナーからホスネームでコンテナーにアクセスできないという問題に悩まされています。そして、あなたはこの問題を述べたインターネット全体で唯一のものです..すでに20時間グーグルで
働い

7
こっちも一緒!何百万人もの開発者がDockerを使用しているように見えるのは正気ではありませんが、公式ドキュメントでさえも、ボックスに単純な名前を付ける方法は誰も知りません。ありがとうございました:)
Sliq

1
念のため、で使用できるようになり--use-aliasesましたdocker-compose run。これにより、runコマンドのエイリアスのハードコーディングが回避されます
grilix

38

Dockerドキュメントに基づく:https : //docs.docker.com/compose/compose-file/#/command

私は単にhostname: <string> docker-composeファイルに入れ ます。

例えば:

[...]

lb01:
  hostname: at-lb01
  image: at-client-base:v1

[...]

コンテナlb01はat-lb01ホスト名としてピックアップします。


docker-composeファイルに複数のコンテナーがある場合、各コンテナーのホスト名を設定しますか?それは非常に非効率的に見えますか?
vgoklani 2017

6
コンテナーによく知られた名前が必要な場合、それは実行可能なソリューションです。
マルチェロロマーニ2017年

9

私が見つけた最も簡単な方法は、docker-compose.ymlcontainer_name」のドキュメントでコンテナ名を設定することです。docker-compose v1 +に適用できます。ホストマシンからコンテナではなく、コンテナからコンテナに対して機能します。

services:
  dns:
    image: phensley/docker-dns
    container_name: affy

これでaffy、コンテナー名を使用して他のコンテナーからアクセスできるようになります。開発環境の複数のredisサーバーに対してこれを行う必要がありました。

このソリューションは、スケーリングする必要がない限り機能します。一貫性のある個々の開発者環境など。


ではCompose 3.7唯一の方法私は、同じスタックの他のサービスコンテナ内から見られるように、データベース・サービスのホスト名がホスト名としてサービスに名前を付けることでしました。hostname:プロパティの使用に失敗しました。環境HOSTNAME =構成の使用も失敗しました。
ステファン、

同様に機能した別のソリューションaliasesは、fozソリューションで説明されているプロパティを使用することでした。
ステファン

1
これは素晴らしい作品が、ビット厄介である-私は今の設定に撮影したcontainer_namehostname私は必要なものを達成するために同じ値に
オリバー・ダンジ

3

kdcを機能させるにはfreeipaコンテナーをスピンする必要があり、ホスト名を指定する必要がありました。そうしないと実行できませんでした。最終的に私にとってうまくいったのは、環境HOSTNAME変数をcomposeに設定することです:

version: 2
services:
  freeipa:
    environment:
      - HOSTNAME=ipa.example.test

今その働き:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
私にとっては、slimを使用すると、HOSTNAME環境変数がコンテナの実際のホスト名にまったく影響を与えません
Oliver Dungey

2
これはあなたが使っていたコンテナでうまくいったかもしれませんが、環境ディレクティブは変数をコンテナに公開するだけです。設定された値を使用して何かを行うのは、コンテナー次第です。多くの場合、それはおそらく何もしません。
MrJohnBBQ

env varを公開することは、コンテナのホスト名とは関係がなく、2つの別個のレルムです。
Marcello Romani
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.