Docker 容器互连 --link
作者:互联网
一、启动两个容器测试
1.创建容器:
# 启动第一个容器
[root@yang ~]# docker run -it -d --name tomcat1 tomcat
# 启动第二个容器
[root@yang ~]# docker run -it -d --name tomcat2 tomcat
[root@yang ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcdd4c02da9c tomcat "catalina.sh run" 2 hours ago Up 2 hours 8080/tcp tomcat2 346962a1d73b tomcat "catalina.sh run" 5 hours ago Up 5 hours 8080/tcp tomcat1
2.测试两个容器间连通性
[root@yang ~]# docker exec -it tomcat1 ping tomcat2 ping: tomcat2: No address associated with hostname
以上显示两个容器之前ping不通!
思考:怎么做才能让两个容器之间ping通呢?
二、具体演示
1.创建容器:
# 启动第一个容器 [root@yang ~]# docker run -it -d --name tomcat3 --link tomcat2 tomcat
--link # 在hosts配置中,指定某容器的映射
2.测试
[root@yang ~]# docker exec -it tomcat3 ping tomcat2 PING tomcat2 (172.17.0.9) 56(84) bytes of data. 64 bytes from tomcat2 (172.17.0.9): icmp_seq=1 ttl=64 time=0.247 ms 64 bytes from tomcat2 (172.17.0.9): icmp_seq=2 ttl=64 time=0.089 ms 64 bytes from tomcat2 (172.17.0.9): icmp_seq=3 ttl=64 time=0.105 ms
查看tomcat3中配置:
[root@yang ~]# docker inspect tomcat3 [ { "Id": "ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf", "Created": "2021-01-29T09:06:20.640610921Z", "Path": "catalina.sh", "Args": [ "run" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 7964, "ExitCode": 0, "Error": "", "StartedAt": "2021-01-29T09:06:21.625013975Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:345867df0879186da623555494dcf5f4561e5bf0b8d2e4276a71947f30bdca0d", "ResolvConfPath": "/var/lib/docker/containers/ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf/resolv.conf", "HostnamePath": "/var/lib/docker/containers/ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf/hostname", "HostsPath": "/var/lib/docker/containers/ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf/hosts", "LogPath": "/var/lib/docker/containers/ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf/ee6a1fd2ba6708fe79f3708489e44e8aa00f9404640c585ae1d2ea5bd2395cdf-json.log", "Name": "/tomcat3", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Capabilities": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": [ "/tomcat2:/tomcat3/tomcat2" ],
以上links位置显示,tomcat3绑定了tomcat2!
3.通过进入容器查看:
# 查看 hosts 配置,发现已经绑定!
[root@yang ~]# docker exec -it tomcat3 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 tomcat2 fcdd4c02da9c 172.17.0.10 ee6a1fd2ba67
其实tomcat3在本地就已经配置了tomcat2的配置了。
结论:
1.两个容器间互相通信使用--link,可以实现互通。
2.docker0 不支持容器名连接访问。
建议:
docker官方已不推荐使用docker run --link来链接2个容器互相通信,随后的版本中会删除--link,但了解其原理,对如何使2个容器之间互相通信还是有帮助。
标签:容器,--,link,tomcat2,tomcat3,docker,root,Docker 来源: https://www.cnblogs.com/yangzp/p/14346317.html