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
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.
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
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.
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
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.