Bei der Verwendung eines Docker-Schwarmknotens im Overlay-Netzwerk habe ich die Verbindung verloren, wenn ich mich von einem anderen Host aus verbinde

632
VaTo

Mein Service wurde mit dem folgenden Befehl mit Docker erstellt:

docker service create --mount  type=bind,src=/tmp/postgres,dst=/var/lib/postgresql/data  --name dev_db  --network mynetwork -p 5432:5432 -d postgres 

Das Problem ist, dass ich, wenn ich das Overlay-Netzwerk nicht verwende --network, eine Verbindung zu dieser Docker-Instanz von einem anderen Host herstellen kann, indem ich einfach den einfachen postgresql-Client verwendet:

psql -h (ipofthehost) mydatabase -Umydatabase

Aber jetzt, wo ich mich von einem anderen Host verbinden möchte, erhalte ich diesen Fehler:

psql: could not connect to server: Connection refused Is the server running on host "ipofdehost" and accepting TCP/IP connections on port 5432? 

Was sagt mir, dass es laufen könnte, aber es kann es nicht sehen. Ich habe überprüft, ob der Dienst ausgeführt wird mit:

docker service ls ID NAME MODE REPLICAS IMAGE PORTS 8hr0qwtca230 dev_db replicated 1/1 postgres:latest *:5432->5432/tcp 

Ich habe mit ss überprüft, ob der Dienst zuhört:

State Recv-Q Send-Q Local Address:Port Peer Address:Port  LISTEN 0 128 *:22 *:*  LISTEN 0 100 127.0.0.1:25 *:*  LISTEN 0 128 :::22 :::*  LISTEN 0 128 :::5432 :::*  LISTEN 0 128 :::12376 :::*  LISTEN 0 100 ::1:25 :::*  LISTEN 0 128 :::443 :::*  

Es scheint, als ob es wegen der Leitung :::5432abhört:, aber für mich scheint es nur für ipv6-Verbindungen zu sein, also wie kann ich es schaffen, auf ipv4-Verbindungen zu hören? Alles, was ich geändert habe, war, dass ich diesen Knoten mit dem verbunden habe Overlay-Netzwerk, daher verstehe ich nicht, warum die Ports nicht öffentlich zugänglich gemacht werden, wenn ich sie freigegeben habe.

Vielen Dank!

1

1 Antwort auf die Frage

1
Ina Kahn

Zum expliziten Festlegen des Listen-Overlay-Hosts nic müssen Sie zunächst die IP-Adresse der Overlay-Schnittstelle angeben und dann Ihre Laufbefehle folgendermaßen ändern:

docker service create --mount  type=bind,src=/tmp/postgres,dst=/var/lib/postgresql/data --name dev_db --network mynetwork -p host-overlay-ipv4:5432:5432 -d postgres 

Ersetzen Sie host-overlay-ipv4 durch die korrekte Overlay-IPv4-Adresse.

Weitere Informationen zur Docker-CLI finden Sie in diesem Wiki .