supprimer ce network_mode: bridge
à partir de votre fichier de composition, a fonctionné pour moi =).
Remerciements à tgogos :je n'avais qu'à utiliser le pont non par défaut.
Pour être complet, voici ma configuration de travail.
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
Et le ping fonctionne maintenant.
$ 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
Une autre solution que j'ai essayée et travaillée consistait à lier explicitement le contenu auquel vous souhaitez envoyer un ping avec le nom d'hôte. Par exemple, j'ai un postgres
conteneur, et un server
souhaite s'y connecter.
Exécutez le server
avec ce qui suit
docker run --name server --link postgres someserver:latest
Dans l'environnement de conteneur de serveur, vous pouvez ensuite envoyer un ping avec (étant donné postgres
est sur le même pont/réseau et est en cours d'exécution)
ping postgres
Depuis --link
est obsolète, il est recommandé d'utiliser le pont réseau.
docker network create YOURNETWORK
docker run --name postgres --network='YOURNETWORK' postgres:latest
docker run --name server --network='YOURNETWORK' server:latest
alors les deux conteneurs peuvent se pinger par nom.