容器互联
–Link
思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker exec -it tomcat03 ping tomcat02
ping: tomcat02: Name or service not known
# 如何可以解决?
# 通过--link可以解决网络联通问题
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker run -d -P --name tomcat04 --link tomcat03 tomcat
511a06550fd96d3ca2999590a21df77b3154bc12346ec0553fb52113f91afb3a
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker exec -it tomcat04 ping tomcat03
PING tomcat03 (172.17.0.9) 56(84) bytes of data.
64 bytes from tomcat03 (172.17.0.9): icmp_seq=1 ttl=64 time=0.169 ms
64 bytes from tomcat03 (172.17.0.9): icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from tomcat03 (172.17.0.9): icmp_seq=3 ttl=64 time=0.087 ms
64 bytes from tomcat03 (172.17.0.9): icmp_seq=4 ttl=64 time=0.083 ms
64 bytes from tomcat03 (172.17.0.9): icmp_seq=5 ttl=64 time=0.079 ms
64 bytes from tomcat03 (172.17.0.9): icmp_seq=6 ttl=64 time=0.088 ms
--- tomcat03 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 0.079/0.097/0.169/0.034 ms
# 反向可以ping通吗?
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker exec -it tomcat03 ping tomcat04
ping: tomcat04: Name or service not known
探究:inspect
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
1c2a18e67a4a bridge bridge local
04c9de8ad10f host host local
97cf7fc6ccad none null local
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker network inspect 1c2a18e67a4a
[
{
"Name": "bridge",
"Id": "1c2a18e67a4afd52ea52db417d05da7f3ecfc39ac8fa28376184b2eaf86057c0",
"Created": "2020-07-04T13:52:02.954048731+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": {
"3715f7b1291339490262b73773c6f10ae6ef17178c788562b72cc1c8bba9b7af": {
"Name": "nginx02",
"EndpointID": "89288cf0fed0564abf73482ebb8726e1df75b9b296703bbd7c8a1ceecf8d3ba9",
"MacAddress": "02:42:ac:11:00:05",
"IPv4Address": "172.17.0.5/16",
"IPv6Address": ""
},
"46ca82801394db3fd67805b07ff7a51c93d89f7fefef0b33e750d6eee0b599ab": {
"Name": "tomcat02",
"EndpointID": "4d2daf000accf173d6a22bbe9ab5d1d451687f8a1c86c447acf46bb9d215fa3c",
"MacAddress": "02:42:ac:11:00:08",
"IPv4Address": "172.17.0.8/16",
"IPv6Address": ""
},
"4f6fc35ee63d398601d145be53c1a862cc0bf1bd041c2d1337233661f8a96dc3": {
"Name": "docker01",
"EndpointID": "de1d3bd14187420cbec68da6d9c1df85929d4de9cf36a7eccb52e3c969344035",
"MacAddress": "02:42:ac:11:00:07",
"IPv4Address": "172.17.0.7/16",
"IPv6Address": ""
},
"511a06550fd96d3ca2999590a21df77b3154bc12346ec0553fb52113f91afb3a": {
"Name": "tomcat04",
"EndpointID": "22524fac8df598adc9bc900b237b1eef69d6f4cef9c20ab3d640288c7cf8f7e6",
"MacAddress": "02:42:ac:11:00:0a",
"IPv4Address": "172.17.0.10/16",
"IPv6Address": ""
},
"785486a2586d009cf6656e6b897ab088a0710a57cffa3125d290aca48148dd66": {
"Name": "nginx01",
"EndpointID": "188e4ca11836af9d4732f6b0fc96008fc4d339d2ed4463c26bfc9188de6906cf",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
},
"a1d183718d527e6e47d374f82b0c652cb2a625f7579776f6e1774e0c4e3cb2e0": {
"Name": "tomcat03",
"EndpointID": "e14736e1bdbc1926f5a9c3ff34535824b3df097f8f3c4bb696d910f688a78e1e",
"MacAddress": "02:42:ac:11:00:09",
"IPv4Address": "172.17.0.9/16",
"IPv6Address": ""
},
"bff663350fad9fb586e424fb39dc42132360989b2c9fe8bc5c4706fae9dc72ae": {
"Name": "tomcat01",
"EndpointID": "f53cd3608ad2cdd1fdd873ab05bad4a9a7bf34762eef878771bee056e88c430f",
"MacAddress": "02:42:ac:11:00:06",
"IPv4Address": "172.17.0.6/16",
"IPv6Address": ""
},
"c73282dbda9410dec4e499d5559f668d3e89e1f76842151883b4db147555ec08": {
"Name": "hzytomcat2",
"EndpointID": "a744565f1b18091dc55ceb2446180131819b2342cef1dc605b6e766a5e7d0aed",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"f87c270d5ddacfe91f2464809284d6679560d2334474f313310b6546bcd345fa": {
"Name": "mysql01",
"EndpointID": "96da0a0f82229be8d8794b71b6118c4194df2173d0da5275c129a81e6fdca11d",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/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": {}
}
]
其实这个tomcat04就是在本地配置了tomcat03的配置
# 查看hosts配置,在这里原理发现
[root@iZ2zedtw714kk6kmn4p41qZ ~]# docker exec -it tomcat04 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.9 tomcat03 a1d183718d52
172.17.0.10 511a06550fd9
本质探究:–link就是在我们的hosts配置中增加了一个172.17.0.9 tomcat03 a1d183718d52
我们现在玩docker已经不建议使用–link了,我们需要的自定义网络,不使用docker0
docker0的缺点:它不支持容器名连接访问