注:测试截图一直上传失败
Docker网络
docker容器内安装网络工具
root@2fd3289306e0:/usr/local/tomcat# apt-get update -y #要等他加载完成,不要Ctrl+C/(ㄒoㄒ)/~~ root@2fd3289306e0:/usr/local/tomcat# apt install -y iproute2 root@2fd3289306e0:/usr/local/tomcat# apt install iputils-ping root@2fd3289306e0:/usr/local/tomcat# apt install net-tools
发现问题并解决
理解docker0
清空所有环境
# 删除所有容器 [root@localhost ~]# docker rm -f $(docker ps -aq) # 删除所有镜像 [root@localhost ~]# docker rmi -f $(docker images -aq) # 查看是否删除干净 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]#
ip addr
三个网络
#问题:docker是如何处理容器网络访问的?
#docker run -d -P --name tomcat01 tomcat #问题: [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat01 ip addr OCI runtime exec failed: exec failed: unable to start container process: exec: "ip": executable file not found in $PATH: unknown [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat01 /bin/bash root@2fd3289306e0:/usr/local/tomcat# ip addr bash: ip: command not found #问题出现的原因:我们下载的某个镜像(例如tomcat镜像)是精简版的,使用此镜像去打开一个容器的时候,发现没有ip addr这个命令。 #解决办法: root@2fd3289306e0:/usr/local/tomcat# apt-get update -y #要等他加载完成,不要Ctrl+C/(ㄒoㄒ)/~~ root@2fd3289306e0:/usr/local/tomcat# apt install -y iproute2 #问题解决,查看网络的IP地址 ip addr,发现容器启动的时候会得到一个eth0@if18的IP地址 root@2fd3289306e0:/usr/local/tomcat# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat01 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever [root@iZbp12ek0pnkij5zwark6lZ ~]# #Linux能否ping同容器 [root@iZbp12ek0pnkij5zwark6lZ ~]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.036 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.042 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.044 ms ^C --- 172.17.0.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2074ms rtt min/avg/max/mdev = 0.036/0.040/0.044/0.008 ms #Linux可以ping通docker容器内部
1、我们每启动一个docker容器,docker就会给容器分配一个IP,我们只要安装了docker,就会有一个网卡docker0,桥接模式,使用的技术是evth-pair技术!
拓展:evth-pair (我是搬运工)
就是 一对的虚拟设备接口,他们都是成对出现的, 一段连着协议,一段彼此相连,正因为有这个特性,evth-pair 充当一个桥梁 连接各种虚拟网络设备的
#再次执行ip addr ,发现多了一块网卡 [root@iZbp12ek0pnkij5zwark6lZ ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:16:3e:09:99:f7 brd ff:ff:ff:ff:ff:ff inet 172.27.127.63/20 brd 172.27.127.255 scope global dynamic eth0 valid_lft 315300316sec preferred_lft 315300316sec inet6 fe80::216:3eff:fe09:99f7/64 scope link valid_lft forever preferred_lft forever 3: bond0: <NO-CARRIER,BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether de:21:db:dd:1c:0f brd ff:ff:ff:ff:ff:ff 4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:69:f1:ac:13 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:69ff:fef1:ac13/64 scope link valid_lft forever preferred_lft forever 18: vetha343c15@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether be:55:10:d3:4f:a4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::bc55:10ff:fed3:4fa4/64 scope link valid_lft forever preferred_lft forever #tomcat01容器内 17: eth0@if18 #容器外 18: vetha343c15@if17
#在启动一个容器测试 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker run -d -P --name tomcat02 tomcat 7311d67743dd89f9538afa0ce8aa21944ea350c47d55c5178db3a57ed6ef4575 [root@iZbp12ek0pnkij5zwark6lZ ~]# ip addr ...... 18: vetha343c15@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether be:55:10:d3:4f:a4 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::bc55:10ff:fed3:4fa4/64 scope link valid_lft forever preferred_lft forever 20: veth8d484d5@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 02:7a:16:3c:12:dd brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::7a:16ff:fe3c:12dd/64 scope link valid_lft forever preferred_lft forever #发现又多了一块网卡,成对的20: veth8d484d5@if19 19: eth0@if20: #查看tomcat02容器内的 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat02 ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever #发现又多了一块网卡,成对的20: veth8d484d5@if19 19: eth0@if20 #我们发现这个容器带来的网卡都是一对一对的 #evth-pair 就是一对虚拟设备接口,都是成对出现的,一端连着协议,一段彼此相连 #正因为有这个特性,我们利用evth-pair充当一个桥梁,连接各种虚拟网络设备的
-
我们测试下tomcat01 和tomcat02是否能ping 通
root@2fd3289306e0:/usr/local/tomcat# ping 172.17.0.1 bash: ping: command not found root@2fd3289306e0:/usr/local/tomcat# apt install iputils-ping root@2fd3289306e0:/usr/local/tomcat# ifconfig bash: ifconfig: command not found root@2fd3289306e0:/usr/local/tomcat# apt install net-tools root@2fd3289306e0:/usr/local/tomcat# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 6327 bytes 10798674 (10.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5382 bytes 384899 (375.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@2fd3289306e0:/usr/local/tomcat# ping 172.17.0.3 PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data. 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.072 ms 64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.070 ms 64 bytes from 172.17.0.3: icmp_seq=3 ttl=64 time=0.056 ms ^C --- 172.17.0.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2082ms rtt min/avg/max/mdev = 0.056/0.066/0.072/0.007 ms [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat02 ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.060 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.065 ms ^C --- 172.17.0.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1003ms rtt min/avg/max/mdev = 0.060/0.062/0.065/0.002 ms #容器和容器之间是可以相互通信的
绘制一个网络模型图
结论:tomcat01和tomcat02共用一个路由器,docker0
所有容器在不指定网络的情况下,都是通过docker0路由的,docker会给我们的每一个容器一个默认的IP
小结:
Docker使用的是Linux的桥接,宿主机中是一个Docker容器的网桥——docker0.
Docker 中的所有网络接口都是虚拟的。虚拟的转发效率高。
只要删除容器,对应的一对网桥就没有了
思考一个场景,我们编写了一个微服务,database url =ip; 项目不重启,数据ip换掉了,我们希望可以处理这个问题,可以按名字来进行访问容器
[root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat01 ping tomcat02 ping: tomcat02: Name or service not known #如何解决呢? [root@localhost ~]# docker exec -it tomcat02 ping tomcat01 ping: tomcat01: Name or service not known # 通过--link既可以解决网络连通问题 [root@localhost ~]# docker run -d -P --name tomcat03 --link tomcat02 tomcat [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat03 ping tomcat02 PING tomcat02 (172.17.0.3) 56(84) bytes of data. 64 bytes from tomcat02 (172.17.0.3): icmp_seq=1 ttl=64 time=0.075 ms 64 bytes from tomcat02 (172.17.0.3): icmp_seq=2 ttl=64 time=0.084 ms 64 bytes from tomcat02 (172.17.0.3): icmp_seq=3 ttl=64 time=0.058 ms ^C --- tomcat02 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2076ms rtt min/avg/max/mdev = 0.058/0.072/0.084/0.010 ms #反向可以ping通吗? [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat02 ping tomcat03 ping: tomcat03: Name or service not known
# 查看docker所有的网络 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8aa9507b64f4 bridge bridge local 05df1ffce5c9 host host local da26ebc0f59d none null local [root@localhost ~]# docker network inspect 容器ID
[root@localhost ~]# docker inspect tomcat03
#查看tomcat03的hosts配置 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat03 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 tomcat02 7311d67743dd 172.17.0.4 d66454c00c70 #--link就是在hosts配置中增加了172.17.0.3 tomcat02 7311d67743dd 映射 #查看下tomcat02的hosts配置 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker exec -it tomcat02 cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.3 7311d67743dd
本质探究:--link 就是我们在hosts配置中增加了一个 172.17.0.3 tomcat02 bc31af7e3491的映射
我们现在玩Docker已经不建议使用–link了!
我们自定义网络!不使用Docker0!
Docker0的问题:它不支持容器名链接访问!
自定义网络
[root@iZbp12ek0pnkij5zwark6lZ ~]# docker network --help Usage: docker network COMMAND Manage networks Commands: connect Connect a container to a network create Create a network disconnect Disconnect a container from a network inspect Display detailed information on one or more networks ls List networks prune Remove all unused networks rm Remove one or more networks #查看所有的docker网络 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8aa9507b64f4 bridge bridge local 05df1ffce5c9 host host local da26ebc0f59d none null local [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network rm mynet #移除mynet网络 #网络模式 #bridge : 桥接 docker (默认,自己创建也使用bridge模式) #none : 不配置网络 #host : 和宿主机共享网络 #container:容器网络连通(用的少,局限很大)
# 我们直接启动的命令默认有一个 --net bridge,而这个就是我们的docker0 docker run -d -P --name tomcat01 tomcat docker run -d -P --name tomcat01 --net bridge tomcat # docker0特点,默认,容器名不能访问, --link可以打通连接! # 我们可以自定义一个网络! # --driver bridge # --subnet 192.168.0.0/16 可以支持255*255个网络 192.168.0.2 ~ 192.168.255.254 # --gateway 192.168.0.1 #我们自定义网络 [root@iZbp12ek0pnkij5zwark6lZ ~]# clear [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 862848341c9b4d32b77ead3fb7f846744700cc25f78eb1ffc1d4c3b17af1e3e9 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 8aa9507b64f4 bridge bridge local 05df1ffce5c9 host host local 862848341c9b mynet bridge local da26ebc0f59d none null local #查看我们自己创建的网络 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network inspect mynet [ { "Name": "mynet", "Id": "862848341c9b4d32b77ead3fb7f846744700cc25f78eb1ffc1d4c3b17af1e3e9", "Created": "2023-07-12T17:48:24.223838131+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.0.0/16", "Gateway": "192.168.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ] #启动容器 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker run -d -P --name tomcat-net-01 --net mynet tomcat fa394cae87ed1a911492a99d5b1b97fc55308e19712832736d4532d62d0d4db3 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker run -d -P --name tomcat-net-02 --net mynet tomcat 604c9112ce55d715ade4ea1bdd471f5cc480f19b6b8a8b467e8767f3a55bf000 #再次查看mynet [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network inspect mynet [ { "Name": "mynet", "Id": "862848341c9b4d32b77ead3fb7f846744700cc25f78eb1ffc1d4c3b17af1e3e9", "Created": "2023-07-12T17:48:24.223838131+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "192.168.0.0/16", "Gateway": "192.168.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "604c9112ce55d715ade4ea1bdd471f5cc480f19b6b8a8b467e8767f3a55bf000": { "Name": "tomcat-net-02", "EndpointID": "26bf677db4c36615da8b853db96b61d76e3a5cdda9ba64a4f6988e1c59472fd1", "MacAddress": "02:42:c0:a8:00:03", "IPv4Address": "192.168.0.3/16", "IPv6Address": "" }, "fa394cae87ed1a911492a99d5b1b97fc55308e19712832736d4532d62d0d4db3": { "Name": "tomcat-net-01", "EndpointID": "4749c70c1b75f6c3526e8ef33ab5fa0c823416da14e72366350bf6dfecd4aed6", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
# 测试,再次 ping 连接 [root@localhost ~]# docker exec -it tomcat-net-01 ping 192.168.0.3 PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data. 64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.113 ms 64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.093 ms ^C --- 192.168.0.3 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 999ms rtt min/avg/max/mdev = 0.093/0.103/0.113/0.010 ms # 现在不使用 --link也可以ping名字了! [root@localhost ~]# docker exec -it tomcat-net-01 ping tomcat-net-02 PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data. 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.068 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.096 ms 64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=3 ttl=64 time=0.094 ms #我们自定义的网络docker都已经帮我们维护好了对应的关系,docker0没有这样的功能,推荐我们平时这样使用网络
好处:
-
redis - 不同的集群使用不同的网络,保证集群时安全和健康的
-
mysql - 不同的集群使用不同的网络,保证集群时安全和健康的
由于网段不同,所以两个网络是隔离的,确保了网络的安全健康
网络连通
docker network connect [OPTIONS] NETWORK CONTAINER #连接网络和容器名 #测试打通tomcat01和mynet #连通之后就是将tomcat01的网络信息放到了mynet网络下 #一个容器两个IP,类似于阿里云服务器的两个IP,一个公网IP一个私网IP [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network connect mynet tomcat01 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network inspect "docker network inspect" requires at least 1 argument. See 'docker network inspect --help'. Usage: docker network inspect [OPTIONS] NETWORK [NETWORK...] Display detailed information on one or more networks [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network inspect mynet [ ....... "Name": "tomcat01", "EndpointID": "539582514a52612f454d969cabe9ada9dad0eb3de0785df798fde9ba229f95fe", "MacAddress": "02:42:c0:a8:00:04", "IPv4Address": "192.168.0.4/16", "IPv6Address": "" }, "604c9112ce55d715ade4ea1bdd471f5cc480f19b6b8a8b467e8767f3a55bf000": { "Name": "tomcat-net-02", "EndpointID": "26bf677db4c36615da8b853db96b61d76e3a5cdda9ba64a4f6988e1c59472fd1", "MacAddress": "02:42:c0:a8:00:03", "IPv4Address": "192.168.0.3/16", "IPv6Address": "" }, "fa394cae87ed1a911492a99d5b1b97fc55308e19712832736d4532d62d0d4db3": { "Name": "tomcat-net-01", "EndpointID": "4749c70c1b75f6c3526e8ef33ab5fa0c823416da14e72366350bf6dfecd4aed6", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" } ..... ] #同样将tomcat02与mynet连接 [root@iZbp12ek0pnkij5zwark6lZ ~]# docker network inspect mynet [ ...... "2fd3289306e0919dc7a91773f7de0cf9553da4a99d48c60035a47560bb6ab7a7": { "Name": "tomcat01", "EndpointID": "539582514a52612f454d969cabe9ada9dad0eb3de0785df798fde9ba229f95fe", "MacAddress": "02:42:c0:a8:00:04", "IPv4Address": "192.168.0.4/16", "IPv6Address": "" }, "604c9112ce55d715ade4ea1bdd471f5cc480f19b6b8a8b467e8767f3a55bf000": { "Name": "tomcat-net-02", "EndpointID": "26bf677db4c36615da8b853db96b61d76e3a5cdda9ba64a4f6988e1c59472fd1", "MacAddress": "02:42:c0:a8:00:03", "IPv4Address": "192.168.0.3/16", "IPv6Address": "" }, "7311d67743dd89f9538afa0ce8aa21944ea350c47d55c5178db3a57ed6ef4575": { "Name": "tomcat02", "EndpointID": "28b65601e480562ce6a9aa4d5f3b99f31922262970d68a896812aaf3d590b770", "MacAddress": "02:42:c0:a8:00:05", "IPv4Address": "192.168.0.5/16", "IPv6Address": "" }, "fa394cae87ed1a911492a99d5b1b97fc55308e19712832736d4532d62d0d4db3": { "Name": "tomcat-net-01", "EndpointID": "4749c70c1b75f6c3526e8ef33ab5fa0c823416da14e72366350bf6dfecd4aed6", "MacAddress": "02:42:c0:a8:00:02", "IPv4Address": "192.168.0.2/16", "IPv6Address": "" ...... ] #测试 # 连通 [root@localhost ~]# docker exec -it tomcat01 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.100 ms 64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.085 ms ^C --- tomcat-net-01 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.085/0.092/0.100/0.012 ms # 当没有将tomcat02加入mynet时,依旧无法连通,没有connect [root@localhost ~]# docker exec -it tomcat02 ping tomcat-net-01 ping: tomcat-net-01: Name or service not known #测试打通tomcat01和mynet #连通之后就是将tomcat01的网络信息放到了mynet网络下 #一个容器两个IP,类似于阿里云服务器的两个IP,一个公网IP一个私网IP #在docker0网络里tomcat01的 IP: 172.17.0.2/16 # gateway:172.17.0.1/16 #在mynet网络里tomcat01的 IP: 192.168.0.4/16 # gateway:192.168.0.1/16
结论:假设要跨网络 操作别人,就要使用docker network connect连通…!