wake-up-neo.com

Wie lege ich den Hostnamen in Docker Compose fest?

In meiner docker-compose.yml-Datei habe ich Folgendes. Der Container nimmt jedoch den Hostnamen-Wert nicht auf. Irgendwelche Ideen?

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

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

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

Die richtige Art der Zuweisung eines Hostnamens - in Bezug auf die Containernetzwerke - ist Definieren eines Alias wie folgt:

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

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

docker-compose run --name alias1 some-service

Und alias1 Kann dann von den anderen Containern gepingt werden.

28
foz

Dies scheint korrekt zu funktionieren. Wenn ich deine 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 die Dinge ansprechen:

$ 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
45
larsks

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

Ich füge einfach hostname: <string> In meine Docker-Compose-Datei ein.

Z.B.:

[...]

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

[...]

und Container lb01 nimmt at-lb01 als Hostnamen auf.

26
Marcello Romani

Ich musste freeipa container drehen, um ein funktionierendes kdc zu haben, und musste ihm einen Hostnamen geben, sonst würde es nicht laufen. Was letztendlich für mich funktioniert hat, ist das Setzen der HOSTNAME env Variable in compose:

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

Jetzt geht es:

docker exec -it freeipa_freeipa_1 hostname
ipa.example.test
3
Roy Golan

Die einfachste Möglichkeit, die ich gefunden habe, besteht darin, den Containernamen im docker-compose.yml Siehe container_name Dokumentation. Dies 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 in der Lage sein, von anderen Containern aus unter Verwendung des Containernamens auf affy zuzugreifen. Ich musste dies für mehrere Redis-Server in einer Entwicklungsumgebung tun.

[~ # ~] note [~ # ~] Die Lösung funktioniert, solange Sie nicht skalieren müssen. Zum Beispiel durchgängige individuelle Entwicklerumgebungen.

1
K.J.