例如,我们希望运行一个容器来运行 PostgreSQL 数据库,并且传递 --net=my_bridge
标记来到你新网络的连接中,可以运行下面的命令:
$ docker run -d --net=my_bridge --name db training/postgres
如果你检查你的 my_bridge
,你可以看到已经有一个容器被添加(attached)上去了。
你也可以检查你的容器来查看连接在哪里:
$ docker inspect --format='{{json .NetworkSettings.Networks}}' db {"my_bridge":{"NetworkID":"7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", "EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"10.0.0.1","IPAddress":"10.0.0.254","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}
现在,你可以使用你熟悉的命令来启动一个 Web 应用程序了。这次不需要指定一个网络。
$ docker run -d --name web training/webapp python app.py
bridge2720×448 26.8 KB
你的 web
应用运行在哪个网络下呢?可以检查应用来确定这个应用运行在默认的 桥接(bridge)
网络。
$ docker inspect --format='{{json .NetworkSettings.Networks}}' web {"bridge":{"NetworkID":"7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812", "EndpointID":"508b170d56b2ac9e4ef86694b0a76a22dd3df1983404f7321da5649645bf7043","Gateway":"172.17.0.1","IPAddress":"10.0.0.2","IPPrefixLen":24,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02"}}
然后获得你 web
应用的 IP 地址。
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web 172.17.0.2
现在,可以打开一个 shell 来运行 db
容器:
$ docker container exec -it db bash root@a205f0dd33b2:/# ping 172.17.0.2 ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. ^C --- 172.17.0.2 ping statistics --- 44 packets transmitted, 0 received, 100% packet loss, time 43185ms
在过一段时间后,可以使用 CTRL-C
来终止 ping
命令,请注意 ping 显示终止了。
这是因为这个 2 个容器运行在不同的网络中,你可以使用 exit
命令来关闭容器进行修复。
Docker 网络运行你附件一个容器到多个你愿意的网络上。你甚至可以添加到一个正在运行的容器上。
运行下面的命令,将 web
应用添加到 my_bridge
网络上。
$ docker network connect my_bridge web
打开 shell 然后再次进入 db
应用,然后尝试使用 ping 命令。这次你可以仅仅使用容器的名字 web
就可以了,而不需要使用 IP 地址。
$ docker container exec -it db bash root@a205f0dd33b2:/# ping web PING web (10.0.0.2) 56(84) bytes of data. 64 bytes from web (10.0.0.2): icmp_seq=1 ttl=64 time=0.095 ms 64 bytes from web (10.0.0.2): icmp_seq=2 ttl=64 time=0.060 ms 64 bytes from web (10.0.0.2): icmp_seq=3 ttl=64 time=0.066 ms ^C --- web ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.060/0.073/0.095/0.018 ms
命令 ping
显示连接到了一个不同的 IP 地址,这个在 my_bridge
上的 IP 地址与 bridge
网络上的 IP 地址是不同的。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!