Docker:如何找到我的容器所在的网络?

the*_*ode 25 networking docker

我是码头工的新手,我想了解一些事情:

  1. 如何查找我的容器所在的网络?(怎么样)
  2. 我可以动态分离我的容器并附加到其他网络上吗?(怎么样)
  3. 如果我必须运行容器,如何检查两者是否在同一网络中?我可以从其他人那里ping一个吗?

请解释谢谢.

joh*_*s85 42

要查看容器所在的网络,请假设您的容器被调用c1:

$ docker inspect c1 -f "{{json .NetworkSettings.Networks }}"
Run Code Online (Sandbox Code Playgroud)

要断开容器与第一个网络的连接(假设您的第一个网络被调用test-net):

$ docker network disconnect test-net c1
Run Code Online (Sandbox Code Playgroud)

然后将其重新连接到另一个网络(假设它被称为test-net-2):

$ docker network connect test-net-2 c1
Run Code Online (Sandbox Code Playgroud)

要检查两个容器(或更多)是否一起在网络上:

$ docker network inspect test-net -f "{{json .Containers }}"
Run Code Online (Sandbox Code Playgroud)


小智 17

老问题..但您可能正在尝试确保容器集群运行正确的网络。有两种简单的方法。你的直觉可能需要这样的东西:

docker ps --format '{{ .ID }} {{ .Names }} {{ json .Networks }}'
Run Code Online (Sandbox Code Playgroud)

但你可能真的想要:

docker network inspect networkname
Run Code Online (Sandbox Code Playgroud)

其中包括该网络上所有容器的列表。


BMi*_*tch 7

  1. 该网络在docker container inspect $id输出中可见,其中$id是容器ID或容器名称。该名称在“网络设置->网络”部分下列出。

  2. 您可以docker network connect $network_name $container_name用来将网络添加到容器。同样,docker network disconnect $network_name $container_name将从Docker网络断开容器。

  3. 如果容器在同一个docker网络上,并且您尚未禁用ICC,则容器可以通过IP地址相互ping通。如果您不在名为“ bridge”的默认网络上,则可以使用包含的DNS发现来按容器名称或网络别名ping并连接到容器。您创建的任何新网络都docker network create $network_name将打开DNS发现,即使它正在使用网桥驱动程序,也只需将其与名为“网桥”的网络分开。容器也可以通过TCP端口连接,即使它们不在同一docker网络中,也无需在docker中公开或发布端口。

这是使用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
Run Code Online (Sandbox Code Playgroud)