小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
Docker 学习 | 网络连通
本文研究 Docker 自定义创建的多个 docker 网络之间如何连通
准备工作
创建一个Docker自定义网络
# 我们自定义一个网络
# docker network create
# --driver bridge
# --subnet 192.168.0.0/16
# --gateway 192.168.0.1
# mynet
$ docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
现在我们就有两个网络了 , 一个
Docker0一个mynet
使用我们创建的mynet网络创建两个 Tomcat 容器
$ docker run -d -P --name tomcat-net-01 --net mynet mytomcat
$ docker run -d -P --name tomcat-net-02 --net mynet mytomcat
使用默认 Docker0 网络创建两个 Tomcat 容器
$ docker run -d -P --name tomcat-01 mytomcat
$ docker run -d -P --name tomcat-02 mytomcat
Tomcat-01 Tomcat-02 如何能 ping 通 tomcat-net-01 tomcat-net-02 呢?
$ docker exec -it tomcat-01 ping tomcat-net-01
ping: tomcat-net-01: Name or service not known # ping 不通
打通 Docker0 和 mynet
docker network connect 连接一个容器到网络
$ docker network connect --help
Usage: docker network connect [OPTIONS] NETWORK CONTAINER
Connect a container to a network
Options:
--alias strings Add network-scoped alias for the container
--driver-opt strings driver options for the network
--ip string IPv4 address (e.g., 172.30.100.104)
--ip6 string IPv6 address (e.g., 2001:db8::33)
--link list Add link to another container
--link-local-ip strings Add a link-local address for the container
# 测试: 打通 tomcat-01 到 mynet
$ docker network connect mynet tomcat-01
# 将 tomcat-01 放到了 mynet 网络下
# 一个容器两个 IP 地址
docker inspect mynet 查看连通结果
"Containers": {
# tomcat-01 已经加入到 mynet 网络
"6624b5f469ed47b1d450d9797c5fd1857b59d561e812c4b5a34ecb07a34f5627": {
"Name": "tomcat-01",
"EndpointID": "1b4e9858a366b459990a042236cc3647b407995bf8b030bd3891fbb377751b10",
"MacAddress": "02:42:c0:a8:00:04",
"IPv4Address": "192.168.0.4/16",
"IPv6Address": ""
},
"9b19e655ee16fb21a6de8313bea2efcf0c067c78c231d00b43db842c88a47ed3": {
"Name": "tomcat-net-02",
"EndpointID": "3306d678dfebfd86fa84f76abac44b1fb14fa8a4782af46b91f2f9745f4f4310",
"MacAddress": "02:42:c0:a8:00:03",
"IPv4Address": "192.168.0.3/16",
"IPv6Address": ""
},
"bd090d6d03dc520808c4ec2a0ba7fba93bbbed8ecbd83cdb19838d3350088464": {
"Name": "tomcat-net-01",
"EndpointID": "2800a0372352de17eb07f89a8d13dab09c50a76f42716b376b96573c97c05417",
"MacAddress": "02:42:c0:a8:00:02",
"IPv4Address": "192.168.0.2/16",
"IPv6Address": ""
}
},
再次使用 tomcat-01 Ping tomcat-net-01
$ docker exec -it tomcat-01 ping tomcat-net-01
PING tomcat-net-01 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.104 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=3 ttl=64 time=0.059 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=4 ttl=64 time=0.055 ms
^C
--- tomcat-net-01 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3111ms
rtt min/avg/max/mdev = 0.051/0.067/0.104/0.022 ms
# ping 通大功告成
结论
假设要跨网络操作容器, 就需要docker network connect连通网络