J'ai appris de documentation docker que je ne peux pas utiliser le DNS de docker pour trouver les conteneurs en utilisant leurs noms d'hôtes sans utiliser un réseau de pont défini par l'utilisateur. J'en ai créé un en utilisant la commande :
docker network create --driver=overlay --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_overlay
et essayé de déployer un conteneur qui l'utilise. Le fichier compose ressemble à :
version: "3.0"
services:
web1:
image: "test"
ports:
- "12023:22"
hostname: "mytest-web1"
networks:
- test
web2:
image: "test"
ports:
- "12024:22"
hostname: "mytest-web2"
networks:
- test
networks:
test:
external:
name: user_defined_overlay
ma version de docker est : Docker version 17.06.2-ce, build cec0b72
et j'ai obtenu l'erreur suivante lorsque j'ai essayé de déployer la pile :
network "user_defined_bridge" is declared as external, but it is not in the right scope: "local" instead of "swarm"
J'ai pu créer un réseau superposé et le définir dans le fichier compose. Cela a bien fonctionné mais pas pour bridge. résultat de docker network ls :
NETWORK ID NAME DRIVER SCOPE
cd6c1e05fca1 bridge bridge local
f0df22fb157a docker_gwbridge bridge local
786416ba8d7f host host local
cuhjxyi98x15 ingress overlay swarm
531b858419ba none null local
15f7e38081eb user_defined_overlay overlay swarm
UPDATE
J'ai essayé de créer deux conteneurs fonctionnant sur deux nœuds d'essaimage différents (le premier conteneur fonctionne sur le gestionnaire tandis que le second fonctionne sur le nœud de travail) et j'ai spécifié le réseau superposé défini par l'utilisateur comme indiqué dans la pile ci-dessus. J'ai essayé d'envoyer une requête ping au conteneur mytest-web2 à partir du conteneur mytest-web1 en utilisant le nom d'hôte, mais j'ai obtenu les résultats suivants unknown host mytest-web2