wake-up-neo.net

Docker: Wie finde ich das Netzwerk, in dem sich mein Container befindet?

Ich bin neu in Docker und versuche ein paar Dinge zu verstehen:

  1. Wie finde ich das Netzwerk, in dem sich mein Container befindet? (Wie)
  2. Kann ich meinen Container dynamisch trennen und an ein anderes Netzwerk anschließen? (Wie)
  3. Wenn ich Container laufen muss, wie kann ich überprüfen, ob sich die beiden im selben Netzwerk befinden. Kann ich einen Ping von einem anderen senden?

Erklären Sie bitte Danke. 

8
theCode

Um zu sehen, in welchen Netzwerken sich Ihr Container befindet, wird davon ausgegangen, dass Ihr Container c1 heißt:

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

So trennen Sie Ihren Container vom ersten Netzwerk (vorausgesetzt, Ihr erstes Netzwerk heißt test-net):

$ docker network disconnect test-net c1

Verbinden Sie es dann erneut mit einem anderen Netzwerk (sofern es als test-net-2 bezeichnet wird):

$ docker network connect test-net-2 c1

So prüfen Sie, ob zwei Container (oder mehr) gemeinsam in einem Netzwerk sind:

$ docker network inspect test-net -f "{{json .Containers }}"
17
johnharris85
  1. Das Netzwerk ist in der docker container inspect $id-Ausgabe sichtbar, wobei $id die Container-ID oder der Containername ist. Der Name ist unter NetworkSettings -> Networks aufgeführt.

  2. Sie können docker network connect $network_name $container_name verwenden, um einem Container ein Netzwerk hinzuzufügen. In ähnlicher Weise trennt docker network disconnect $network_name $container_name einen Container von einem Docker-Netzwerk.

  3. Container können sich nach IP-Adresse gegenseitig pingen, wenn sie sich im selben Docker-Netzwerk befinden und Sie ICC nicht deaktiviert haben. Wenn Sie sich nicht im Standardnetzwerk mit dem Namen "bridge" befinden, können Sie die enthaltene DNS-Erkennung verwenden, um per Containernamen oder Netzwerkalias einen Ping-Befehl herzustellen und eine Verbindung zu Containern herzustellen. Bei jedem neuen Netzwerk, das Sie mit docker network create $network_name erstellt haben, ist die DNS-Erkennung aktiviert. Selbst wenn der Brückentreiber verwendet wird, muss er lediglich von der mit dem Namen "Brücke" getrennt sein. Container können auch über TCP - Ports eine Verbindung herstellen, selbst ohne Ports im Docker zugänglich zu machen oder zu veröffentlichen, solange sie sich im selben Docker-Netzwerk befinden.

Hier ein einfaches Beispiel zum Testen einer Netzwerkverbindung mit 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