
Ich habe eine Docker-Swarm-Konfiguration und habe darin zwei Stapel ( main
und mon
) bereitgestellt. Ich kann einen Port in einem Stapel freigeben und von einem anderen aus darauf verweisen. Ich habe jedoch versucht, einen Weg zu finden, dies nicht zu tun, sondern stattdessen den Zugriff über den DNS 127.0.0.11 zu ermöglichen.
Ich mon
habe einen Dienst namensgrafana
Verwenden vonhttps://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stackwas darauf hinwies, dass ich den Stapelnamen zum Verweisen darauf verwenden kann, funktionierte nicht, als ich ping grafana.mon
es versuchte, wurde nur ein ungültiger Hostname zurückgegeben.
Antwort1
Dazu müssen Sie nur dafür sorgen, dass sie dasselbe Netzwerk verwenden, dann sind sie sichtbar. In meinem Fall habe ich ein Netzwerk namens definiert public
, auf das alle meine Stapel extern verweisen .
docker network create -d overlay --attachable public
Von dort habe ich in meiner docker-compose.yml-Datei
networks:
public:
external:
name: public
Um darauf zuzugreifen, verwenden Sie einfach den Dienstnamen.
Antwort2
Sie müssen beiden Stapeln die Verbindung über einen Overlay-Netzwerktyp ermöglichen und dann beiden Stapeln die Verwendung des Overlay-Netzwerks gestatten, das extern zu beiden Stapeln erstellt wurde (zumindest für den erforderlichen Dienst).
Das Overlay-Netzwerk sollte vor dem Hochfahren der Stapel erstellt werden, damit die Dienste, die eine Verbindung herstellen müssen, sich daran „anhängen“ können.
Erstellen Sie das Netzwerk wie folgt
docker network create --driver overlay --attachable
Dann verweisen Sie auf den Dienstnamen in Ihrer Umgebungsdatei. Sie können überprüfen, welchen Namen Ihr Dienst hat, der
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vkz5vccbmce7 foo-stack_por-service replicated 1/1 por-service:1.0.0 *:33065->3306/tcp
sjpnrkm1iiha foo-stack_vic-service replicated 1/1 vic-service:1.0.0 *:8081->80/tcp
0capavl31oab bar-stack_tar-service replicated 1/1 tar-service:1.0.0 *:33066->3306/tcp
9vohh24jt6hy bar-stack_zen-service replicated 1/1 zen-service:1.0.0 *:8082->80/tcp
Jetzt ermitteln Sie den Namen des Dienstes aus der Spalte NAME. Beispiel:bar-stack_tar-dienst
Beachten Sie, dass Ihren Diensten der Stapelname vorangestellt ist, den Sie beim Bereitstellen angeben.
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarm