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個容器之間互相通信還是有幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM