3 votes

ne peut pas utiliser de pont défini par l'utilisateur dans le fichier yaml de composition de swarm

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

4voto

BMitch Points 3744

À partir de la version 17.06, vous pouvez créer des réseaux locaux de nœuds avec un swarm scope. Pour ce faire, utilisez l'option --scope=swarm option, par exemple :

docker network create --scope=swarm --driver=bridge \
  --subnet=172.22.0.0/16 --gateway=172.22.0.1 user_defined_bridge

Vous pouvez ensuite utiliser ce réseau avec les services et les piles définis en mode essaim. Pour plus de détails, vous pouvez consulter PR #32981 .


Edit : vous semblez avoir considérablement compliqué votre problème. Tant que tout est fait dans un seul fichier de composition, il n'y a pas besoin de définir le réseau comme externe. Il est nécessaire d'utiliser un réseau superposé si vous voulez communiquer de conteneur à conteneur. La découverte DNS est incluse sur les réseaux bridge et overlay, à l'exception du réseau "bridge" par défaut que docker crée. Avec un fichier compose, vous n'utiliserez jamais ce réseau sans le configurer explicitement comme un réseau externe avec ce nom. Donc, pour que la mise en réseau de conteneur à conteneur fonctionne, vous pouvez laisser docker-compose o docker stack deploy créer automatiquement le réseau pour votre projet/stack avec :

version: "3.0"
   services:
     web1:
       image: "test"
       ports:
       - "12023:22"
     web2:
       image: "test"
       ports:
         - "12024:22"

Notez que j'ai également supprimé le paramètre "hostname". Il n'est pas nécessaire pour la résolution DNS. Vous pouvez communiquer directement avec un service VIP avec le nom "web1" ou "web2" à partir de l'un de ces conteneurs.

Avec docker-compose il créera un réseau de pontage par défaut. Le mode essaim créera un réseau superposé. Ces valeurs par défaut sont idéales pour permettre la découverte du DNS et la communication de conteneur à conteneur dans chacun des scénarios.

0voto

yamenk Points 11478

Le réseau superposé est le réseau à utiliser dans Swarm. Swarm est destiné à être utilisé pour gérer des conteneurs sur plusieurs hôtes et les réseaux superposés sont les réseaux multi-hôtes de Docker. https://docs.docker.com/engine/userguide/networking/get-started-overlay/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X