lösche diesen network_mode: bridge
aus Ihrer Compose-Datei, hat bei mir funktioniert =).
Dank an tgogos:Ich musste nur die nicht standardmäßige Bridge verwenden.
Der Vollständigkeit halber hier meine funktionierende Konfiguration.
version: "3"
services:
main:
networks:
test:
image: python:3.5.2
entrypoint: /usr/bin/yes
another:
networks:
test:
image: python:3.5.2
entrypoint: /usr/bin/yes
networks:
test:
driver: bridge
Und der Ping funktioniert jetzt.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
faa9f96d46a9 python:3.5.2 "/usr/bin/yes" 9 seconds ago Up 9 seconds dockerplayground_main_1
5b2d56ac0cd7 python:3.5.2 "/usr/bin/yes" 9 seconds ago Up 8 seconds dockerplayground_another_1
$ docker exec -it faa ping another
PING another (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.054 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.047 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.059 ms
64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.066 ms
Eine andere Lösung, die ich ausprobiert und bearbeitet habe, war das explizite Verknüpfen des Inhalts, den Sie pingen möchten, mit dem Hostnamen. Ich habe zum Beispiel einen postgres
Container und ein server
möchte sich damit verbinden.
Führen Sie server
aus mit folgendem
docker run --name server --link postgres someserver:latest
In der Server-Container-Umgebung können Sie dann mit (angegeben postgres
befindet sich auf der gleichen Bridge/im gleichen Netzwerk und läuft)
ping postgres
Seit --link
veraltet ist, wird empfohlen, eine Netzwerkbrücke zu verwenden.
docker network create YOURNETWORK
docker run --name postgres --network='YOURNETWORK' postgres:latest
docker run --name server --network='YOURNETWORK' server:latest
dann können sich die beiden Container namentlich anpingen.