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.