web-dev-qa-db-fra.com

Docker: comment trouver le réseau dans lequel se trouve mon conteneur?

Je suis nouveau en docker et j'essaie de comprendre quelques choses:

  1. Comment trouver le réseau dans lequel se trouve mon conteneur? (Comment)
  2. Puis-je détacher dynamiquement mon conteneur et le connecter à un autre réseau? (Comment)
  3. Si je dois exécuter un conteneur, comment vérifier si les deux sont dans le même réseau? puis-je cingler un de l'autre?

S'il vous plaît expliquer Merci. 

8
theCode

Pour voir sur quel (s) réseau (s) se trouve votre conteneur, supposons que votre conteneur s'appelle c1:

$ docker inspect c1 -f "{{json .NetworkSettings.Networks }}"

Pour déconnecter votre conteneur du premier réseau (en supposant que votre premier réseau s'appelle test-net):

$ docker network disconnect test-net c1

Ensuite, pour le reconnecter à un autre réseau (en supposant qu'il s'appelle test-net-2):

$ docker network connect test-net-2 c1

Pour vérifier si deux conteneurs (ou plus) sont ensemble sur un réseau:

$ docker network inspect test-net -f "{{json .Containers }}"
17
johnharris85
  1. Le réseau est visible dans la sortie docker container inspect $id, où $id est l'ID ou le nom du conteneur. Le nom est répertorié dans la section NetworkSettings -> Networks.

  2. Vous pouvez utiliser docker network connect $network_name $container_name pour ajouter un réseau à un conteneur. De même, docker network disconnect $network_name $container_name déconnectera un conteneur d'un réseau Docker.

  3. Les conteneurs peuvent s’envoyer une requête ping par adresse IP s’ils se trouvent sur le même réseau Docker et que vous n’avez pas désactivé ICC. Si vous ne vous trouvez pas sur le réseau par défaut nommé "pont", vous pouvez utiliser la découverte DNS incluse pour effectuer un ping et vous connecter aux conteneurs par nom de conteneur ou alias de réseau. La découverte DNS est activée sur tout nouveau réseau que vous avez créé avec docker network create $network_name, même si elle utilise le pilote de pont, il doit simplement être distinct de celui nommé "pont". Les conteneurs peuvent également se connecter via les ports TCP, même sans exposer ni publier de ports dans le menu fixe, à condition qu'ils se trouvent sur le même réseau.

Voici un exemple de bas niveau de test d’une connexion réseau avec netcat:

$ docker network create test-net

$ docker run --net test-net --name nc-server -d nicolaka/netshoot nc -vl 8080
17df24cf91d1cb785cfd0ecbe0282a67adbfe725af9a1169f0650a022899d816

$ docker run --net test-net --name nc-client -it --rm nicolaka/netshoot nc -vz nc-server 8080
Connection to nc-server 8080 port [tcp/http-alt] succeeded!

$ docker logs nc-server
Listening on [0.0.0.0] (family 0, port 8080)
Connection from nc-client.test-net 37144 received!

$ docker rm nc-server
nc-server

$ docker network rm test-net
2
BMitch