Wie greifen Sie auf einen Dienst zu, der sich in einem anderen Stapel befindet?

Wie greifen Sie auf einen Dienst zu, der sich in einem anderen Stapel befindet?

Ich habe eine Docker-Swarm-Konfiguration und habe darin zwei Stapel ( mainund 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 monhabe 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.mones 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

verwandte Informationen