Wie setze ich den Hostnamen in Docker-Compose?


120

In meiner docker-compose.ymlDatei habe ich Folgendes. Der Container nimmt jedoch den Hostnamenwert nicht auf. Irgendwelche Ideen?

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

Wenn ich den Hostnamen im Container überprüfe, wird er nicht erfasst affy.


1
Welche Version von Compose verwenden Sie?
Kojiro

Antworten:



57

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

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

Und dann bringen Sie die Dinge zur Sprache:

$ 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 den Hostnamen im Container, alles scheint in Ordnung zu sein:

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

1
Welche Version von Compose verwenden Sie?
Kojiro

Dieses Format funktioniert in der neuesten Version von Docker-Compose nicht. YML-Dateien sind heikle Dinge; Sind Sie sicher, dass dies das richtige Format für DNS ist?
George Stocker

3
YML-Dateien sind nicht wirklich so pingelig. Was bedeutet "funktioniert nicht"? Laut den Dokumenten sind beide hostnameund domainnamegültige docker-compose.ymlOptionen. Update: gerade getestet, scheint immer noch gut zu funktionieren (Docker-Compose-Version 1.4.2, Docker-Version 1.8.2).
Larsks

Gibt es eine Möglichkeit, diesen Hostnamen außerhalb der Docker-Umgebung verfügbar zu machen? Es wäre schön, wenn der Host über seinen DNS-Namen auf die Docker-Container zugreifen könnte.
Paul Praet

1
Das ist möglich und wahrscheinlich eine eigene Frage wert. Wenn Sie nach "Docker-DNS" suchen, finden Sie mehrere relevante Ergebnisse. Schauen Sie sich zuerst an, was da draußen ist.
Larsks

53

Ich habe festgestellt, dass der Hostname bei der Verwendung für andere Container nicht sichtbar war docker run. Dies stellt sich als bekanntes Problem heraus (möglicherweise eher als bekanntes Merkmal), wobei ein Teil der Diskussion Folgendes ist:

Wir sollten den Dokumenten wahrscheinlich eine Warnung zur Verwendung des Hostnamens hinzufügen. Ich denke, es ist selten nützlich.

Die richtige Art, einen Hostnamen zuzuweisen - in Bezug auf das Containernetzwerk - besteht darin , einen Alias wie folgt zu definieren :

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

Leider funktioniert das immer noch nicht docker run. Die Problemumgehung besteht darin, dem Container einen Namen zuzuweisen:

docker-compose run --name alias1 some-service

Und alias1kann dann aus den anderen Containern gepingt werden.


10
Ich habe das Problem, dass ich von anderen Containern aus nicht mit dem Namen auf den Container zugreifen kann. Und du bist der einzige im ganzen Internet, der dieses Problem angegeben hat.
Ich habe

7
Hier gilt das gleiche! Es ist verrückt, dass Millionen von Entwicklern Docker zu verwenden scheinen, aber niemand weiß, wie man einer Box einen einfachen Namen gibt, nicht einmal die offiziellen Dokumente. Vielen Dank :)
Sliq

1
Nur für den Fall, jetzt können wir --use-aliasesmit verwenden docker-compose run. Dadurch wird vermieden , die alias hartzucodieren auf dem runBefehl
grilix

38

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

Ich habe einfach hostname: <string> meine Docker-Compose-Datei eingefügt.

Z.B:

[...]

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

[...]

und Container lb01 wird at-lb01als Hostname übernommen.


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

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

9

Der einfachste Weg, den ich gefunden habe, besteht darin, einfach den Containernamen in der Dokumentation docker-compose.ymlSiehe Containername festzulegen. Es gilt für Docker-Compose v1 +. Es funktioniert von Container zu Container, nicht von Host-Computer zu Container.

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

Jetzt sollten Sie affyüber den Containernamen von anderen Containern aus zugreifen können . Ich musste dies für mehrere Redis-Server in einer Entwicklungsumgebung tun.

HINWEIS Die Lösung funktioniert so lange, wie Sie nicht skalieren müssen. Wie konsistente individuelle Entwicklerumgebungen.


In Compose 3.7dem einzigen Weg , habe ich den Datenbankdienst Hostnamen aus einem anderen Service - Containern aus dem gleichen Stapel zu sehen war , den Dienst als Hostname zu nennen. Die Verwendung der hostname:Eigenschaft ist fehlgeschlagen. Die Verwendung der Umgebung HOSTNAME = Konstrukt ist ebenfalls fehlgeschlagen.
Stephane

Eine andere Lösung, die ebenfalls funktionierte, bestand darin, die aliasesin der fozLösung beschriebene Eigenschaft zu verwenden .
Stephane

1
Dies funktioniert gut , ist aber ein bisschen chaotisch - ich nun auf Einstellung genommen haben container_nameund hostnameauf den gleichen Wert , was zu erreichen Ich brauche
Oliver Dungey

3

Ich musste den Freeipa-Container drehen , um einen funktionierenden KDC zu haben, und musste ihm einen Hostnamen geben, sonst würde er nicht ausgeführt. Was letztendlich für mich funktioniert hat, ist das Setzen der HOSTNAMEenv-Variablen in compose:

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

Jetzt geht es:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test

2
Für mich führt die Verwendung von slim zu einer HOSTNAME-Umgebungsvariablen, die überhaupt keinen Einfluss auf den tatsächlichen Hostnamen des Containers hat
Oliver Dungey,

2
Während dies möglicherweise mit dem von Ihnen verwendeten Container funktioniert hat, macht die Umgebungsanweisung nur Variablen für den Container verfügbar. Es liegt immer noch am Container, etwas mit dem eingestellten Wert zu tun. In vielen Fällen wird es wahrscheinlich nichts tun.
MrJohnBBQ

Das Offenlegen einer env var hat nichts mit dem Hostnamen des Containers zu tun. Es handelt sich um zwei separate Bereiche.
Marcello Romani
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.