2015-04-28 3 views
33

In meiner docker-compose.yml-Datei habe ich Folgendes. Der Container übernimmt jedoch nicht den Wert des Hostnamens. Irgendwelche Ideen?Wie setze ich Hostname in Docker Compose?

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

ich Ihre Frage richtig bearbeitet haben, um vorformatierte Text angezeigt werden soll. Dies macht es viel lesbarer. – larsks

+1

Welche Version von Compose verwenden Sie? – kojiro

Antwort

23

Dies scheint richtig zu funktionieren. Wenn ich Ihre Konfiguration in eine Datei speichern,:

$ cat > compose.yml <<EOF 
dns: 
    image: phensley/docker-dns 
    hostname: affy 
    domainname: affy.com 
    volumes: 
    - /var/run/docker.sock:/docker.sock 
EOF 

Und dann Dinge bringen:

$ 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 

Und dann überprüfen Sie die Hostnamen im Innern des Behälters, scheint alles in Ordnung zu sein:

$ docker exec -it stack_dns_1 hostname 
affy.affy.com 
+0

Welche Version von Compose verwenden Sie? – kojiro

+0

Dieses Format funktioniert nicht in der neuesten Version von Docker-Compose. YML-Dateien sind knifflige Dinge; Bist du sicher, dass dies das richtige Format für DNS ist? –

+2

YML-Dateien sind nicht wirklich so knifflig. Was bedeutet "nicht funktioniert"?Laut [der Dokumentation] (https://docs.docker.com/compose/compose-file/) sind sowohl 'hostname' als auch' domainname' gültige 'docker-compose.yml' Optionen. Update: gerade getestet, scheint immer noch gut zu funktionieren (docker-komponieren Version 1.4.2, Docker-Version 1.8.2). – larsks

9

Basierend auf Docker Dokumentation: https://docs.docker.com/compose/compose-file/#/command

ich einfach Setzen Sie hostname: <string> in meine Docker-komponieren Datei.

Z. B .:

[...] 

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

[...] 

und Behälter LB01 nimmt at-lb01 als Hostnamen auf.

+0

Wenn Sie mehrere Container in der Docker-Compose-Datei haben, würden Sie den Hostnamen für jeden Container festlegen? das scheint sehr ineffizient zu sein? – vgoklani

+0

Wenn Sie bekannte Namen für Container benötigen, ist dies eine praktikable Lösung. –

2

Ich fand, dass der Hostname für andere Container nicht sichtbar war, wenn docker run verwendet wurde. Dies erweist sich als ein known issue (vielleicht ein bekanntes Merkmal) zu sein, mit einem Teil der Diskussion Wesen:

Wir wahrscheinlich eine Warnung an die Dokumentation über die Verwendung von Hostnamen hinzufügen sollten. Ich denke, es ist selten nützlich.

Der richtige Weg, um einen Hostnamen zuweisen - in Bezug auf die Container-Networking - ist define an alias wie so:

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

Leider mit docker run diese noch nicht nicht. Die Abhilfe ist der Behälter einen Namen zuweisen:

docker-compose run --name alias1 some-service 

Und alias1 kann dann von den anderen Behältern angepingt werden.

1

Ich musste freeipa container drehen, um eine funktionierende kdc zu haben und musste ihm einen Hostnamen geben, sonst würde es nicht laufen. Was für mich schließlich ist die Einstellung der HOSTNAME env in compose Variable funktionierten:

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

Jetzt seine Arbeits:

docker exec -it freeipa_freeipa_1 hostname 
ipa.example.test