Versuchen Sie, 127.0.0.1:6379
zu ändern zu redis:6379
.
Obwohl Redis ausgeführt wird, wird Ihr python
Container kann nicht damit kommunizieren; Dies liegt daran, dass versucht wird, eine Verbindung zu 127.0.0.1:6379
herzustellen , aber aus Sicht des Containers läuft dort nichts. Das Debuggen kann etwas frustrierend sein, aber es ist etwas einfacher, wenn Sie bedenken, dass Container ihren eigenen Netzwerk-Namespace erhalten. Als Ergebnis python
's localhost !=redis
's localhost !=localhost
Ihrer Host-Maschine .
Glücklicherweise ist es einfach, Container zu verbinden, die sich dieselbe Brücke teilen, und standardmäßig docker-compose
erstellt ein einzelnes Bridge-Netzwerk und verbindet alle Ihre Container mit ihnen und stellt das notwendige DNS bereit, damit sie sich gegenseitig erkennen können. Daher funktioniert die Container-zu-Container-Kommunikation einfach über den Dienstnamen.
Als Hinweis:Es ist möglich, Container im selben Namespace und in ihnen im Namespace des Hosts über --net=container:<container-id>
auszuführen oder --net=host
Flagge. Dies ist besonders nützlich, um Debugging-Tools in einem Container auszuführen und sie an den Netzwerk-Namespace eines anderen Containers oder des Hosts anzuhängen, z. Verwenden von netshoot, um zu sehen, welche Ports innerhalb des Containers lauschen (offengelegt oder nicht), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.