Puede que se de el caso de que encuentres alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.
Créditos a tgogos: solo tuve que usar el puente no predeterminado.
Para completar, aquí está mi configuración de trabajo.
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
Y el ping ahora funciona.
$ 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
borrar esto network_mode: bridge
de su archivo de redacción, funcionó para mí =).
Otra solución que probé y trabajé fue vincular explícitamente el contenido al que desea hacer ping con el nombre del host. Por ejemplo, tengo un postgres
contenedor y un server
quiere conectarse a él.
ejecutar el server
con lo siguiente
docker run --name server --link postgres someserver:latest
En el entorno del contenedor del servidor, puede hacer ping con (dado postgres
está en el mismo puente/red y se está ejecutando)
ping postgres
Ya que --link
ha quedado en desuso, se recomienda utilizar el puente de red.
docker network create YOURNETWORK
docker run --name postgres --network='YOURNETWORK' postgres:latest
docker run --name server --network='YOURNETWORK' server:latest
entonces los dos contenedores pueden hacer ping entre sí por nombre.
Recuerda recomendar este ensayo si te fue de ayuda.