容器之间也可以ping通
宿主机 有个docker0网卡
当容器1生成时 会有个eth0@if数字的网卡 同时 宿主机也会同时生成个veth???@if数字 的网卡
容器2 同理
它是把宿主机的docker0这个东西当做路由了
问:
现有容器03 和 容器04
这两个 想 04 ping 通03 && 03 ping 04 (通过容器名字ping通)
直接在容器中/etc/hosts 文件编辑即可
还可通过命令
--link 本质就是改个/etc/hosts文件这个不好玩
[root@qq ~]# docker network ls #查看有哪些网络
NETWORK ID NAME DRIVER SCOPE
5ccd0d862768 bridge bridge local
2c1d189ac353 host host local
ded0d55931c2 none null local
[root@qq ~]# docker network inspect 5ccd0d862768 #查看网络的具体信息
[
{
"Name": "bridge",
"Id": "5ccd0d86276849d0d6af0d4837aca04b10cdb05f3b61c757cd8981fe57da882d",
"Created": "2020-05-19T21:12:04.053833002+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16", #这是宿主机的
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"15c3653b15bb958c26110bba8f1a759ea789510a8c2a10451e5de76df9ca086d": {
"Name": "tomcate02",
"EndpointID": "313c891b87c4a0d412ac5ef0bc23296d055193a35d5eafa1354561c4a497d9aa",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"519fdc35599696caed3e4d7a03c0228c309d831eadd5e8a0d193e4ff628fe056": {
"Name": "tomcat01",
"EndpointID": "d2d3cd4897e77e9ec5ea4eeaee462e43a9ccbe7326aa105116c4db0fe2672632",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"72153caeeba026409bad3c207cda3557a889545ef7ac08b99af8f322007134b5": {
"Name": "tomcat03",
"EndpointID": "a51bfbd2c6228c3f6b9bec9044cf5ed99d58de794d451e38e43a96af851773ea",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
[root@qq ~]#
docker network命令
[root@qq ~]# 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 run -d -P --name tomcat01 tomcat #这个默认有个 --net bridge 这个参数
#这个bridge 就是 宿主机中的 docker0
[root@qq ~]# docker network create --driver bridge --subnet 192.168.110.0/24 --gateway 192.168.110.1 mynet #这个就新建了个网络
# --driver bridge 是桥接的意思(通过一个网桥上网)
c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6
[root@qq ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5ccd0d862768 bridge bridge local
2c1d189ac353 host host local
c7858af01f6a mynet bridge local
ded0d55931c2 none null local
[root@qq ~]#
[root@qq ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6",
"Created": "2020-05-19T22:57:36.088668856+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.110.0/24",
"Gateway": "192.168.110.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
上面就是建立个局域网
开始用这个mynet网
[root@qq ~]# docker run -d -P --name tomcat-mynet01 --net mynet tomcat #开了个容器 网络是mynet
c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb
[root@qq ~]# docker run -d -P --name tomcat-mynet02 --net mynet tomcat #开了个容器 网络是mynet
5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b
[root@qq ~]# docker network inspect mynet
[
{
"Name": "mynet",
"Id": "c7858af01f6a49785a29e03cfad804d2a3f397de318a9d50849e5c78db25e3e6",
"Created": "2020-05-19T22:57:36.088668856+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.110.0/24",
"Gateway": "192.168.110.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
"Name": "tomcat-mynet02",
"EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
"MacAddress": "02:42:c0:a8:6e:03",
"IPv4Address": "192.168.110.3/24", #这个是自动分配的
"IPv6Address": ""
},
"c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
"Name": "tomcat-mynet01",
"EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
"MacAddress": "02:42:c0:a8:6e:02",
"IPv4Address": "192.168.110.2/24", #这个是分配的网址
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
[root@qq ~]#
设置了个局域网myweb后就会有这样的功能
可以通过域名相互ping通了(这个是docker默认的(docker0网卡)不能这样的,只能通过自己修改/etc/hosts文件(或者用命令--link 解决))
[root@qq ~]# docker exec -it tomcat-mynet01 ping tomcat-mynet02
PING tomcat-mynet02 (192.168.110.3) 56(84) bytes of data.
64 bytes from tomcat-mynet02.mynet (192.168.110.3): icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from tomcat-mynet02.mynet (192.168.110.3): icmp_seq=2 ttl=64 time=0.109 ms
^C
--- tomcat-mynet02 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.074/0.091/0.109/0.019 ms
[root@qq ~]# docker exec -it tomcat-mynet02 ping tomcat-mynet01
PING tomcat-mynet01 (192.168.110.2) 56(84) bytes of data.
64 bytes from tomcat-mynet01.mynet (192.168.110.2): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from tomcat-mynet01.mynet (192.168.110.2): icmp_seq=2 ttl=64 time=0.110 ms
^C
--- tomcat-mynet01 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.030/0.070/0.110/0.040 ms
[root@qq ~]#
又有个新问题
如果我有个在 docker0 网卡(172.17.0.0)的 容器tomcat01 和 tomcat02
想ping 通
在mynet(192.168.110.0) 网络的 容器 tomcat-mynet01 和 tomcat-mynet02 怎么办?
[root@qq ~]# docker network connect mynet tomcat01 #这个产生的结果是
[root@qq ~]# docker network inspect mynet
由原来的这个
"Containers": {
"5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
"Name": "tomcat-mynet02",
"EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
"MacAddress": "02:42:c0:a8:6e:03",
"IPv4Address": "192.168.110.3/24",
"IPv6Address": ""
},
"c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
"Name": "tomcat-mynet01",
"EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
"MacAddress": "02:42:c0:a8:6e:02",
"IPv4Address": "192.168.110.2/24",
"IPv6Address": ""
}
},
变成了这个
"Containers": {
"5851fd56b4cd458c0323fa8c18be44e76a2b3c50631d7eb00e68fcece43c359b": {
"Name": "tomcat-mynet02",
"EndpointID": "4882cb85e77a26e63492a29054d045b265a02ff1dfa2624143090bf988606fe6",
"MacAddress": "02:42:c0:a8:6e:03",
"IPv4Address": "192.168.110.3/24",
"IPv6Address": ""
},
"825077f8c456be3ded9c46557dd554059b09a0429b3d3b17b2a5104b9e9b180f": {
"Name": "tomcat01",
"EndpointID": "7adc356c4cf2a7a748c1ce6c48465c553a864b033fef5e9dd16bf28e61d0aeed",
"MacAddress": "02:42:c0:a8:6e:04",
"IPv4Address": "192.168.110.4/24", ###多了个这
"IPv6Address": ""
},
"c8f56e87a0f5a2f144fe6e524dcfddcaecf9f87c67f0ab427287e552f4e2d5bb": {
"Name": "tomcat-mynet01",
"EndpointID": "897a2af375af6cc7ff5e74826d41e3898ba49b27d276358a9fcf074ed983b76b",
"MacAddress": "02:42:c0:a8:6e:02",
"IPv4Address": "192.168.110.2/24",
"IPv6Address": ""
}
},
这个就是 一个容器两个地址
经测试这个tomcat-myweb01 && tomcat-myweb02 && tomcat01 互联互通
当tomcat02 这个容器仍然不能 ping 通 myweb中的容器 ,,,,可以用connet 联通下就可以了