docker容器间通信

现在在我们的docker中已经有了三个容器,分别是DB/API/UI三个容器,三个容器间肯定是要进行互相通信的

可以查看docker的官方文档,https://docs.docker.com/engine/userguide/networking/#the-default-bridge-network

当您安装Docker时,它会自动创建三个网络。您可以使用以下docker network ls命令列出这些网络:

docker@default:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
78763a12b144 bridge bridge local
7da828c0e77b host host local
af3045e58ef6 none null local

Docker内置这三个网络。运行容器时,您可以使用该--network标志来指定容器应连接到哪些网络。

通过命令创建了两个容器

docker run -d --name mongo-docker-dev --restart=always -p 27018:27017  -v /home/docker/mongo/dev/data/configdb:/data/configdb  -v/home/docker/mongo/dev/data/db:/data/db mongo

docker run -d --name person-blog-dev-backend --restart=always -p 4001:4000 person-blog-dev-backend

当创建了两个容器后,通过命令可以查看到所以容器的网络配置信息

docker@default:~$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "78763a12b144233dea7b7695490567dcace526019b8268f11df019aab7c9340a",
        "Created": "2017-04-27T02:06:16.288209903Z",
        "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,
        "Containers": {
            "b93993405c432c276d43220abebc8e3529a49dc42afa4a7ee5afdb139774b973": {
                "Name": "person-blog-dev-backend",
                "EndpointID": "20ce486bbd7756260948160ea93cf69f5a9a8dd9809acf89a35cc20d07b9377c",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "f107144cf3cb412f69dc36dd11601b592b220601a6dce549be8e2ea781b53522": {
                "Name": "mongo-docker-dev",
                "EndpointID": "6b852692948c3c8d83979c33afe3e4c97055f07e74660e20cad612e86984d0c2",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/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": {}
    }
]
docker@default:~$

可以看到,两个容器都在同一个网段中,应该也是可以互相通信的,使用命令,这里是使用backend去ping mongodb容器

docker@default:~$ docker exec -it person-blog-dev-backend bash
root@b93993405c43:/user/src/app# ping -w3 172.17.0.2
PING 172.17.0.2 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: icmp_seq=0 ttl=64 time=0.080 ms
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.091 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.146 ms
--- 172.17.0.2 ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max/stddev = 0.080/0.106/0.146/0.029 ms
root@b93993405c43:/user/src/app#
原文地址:https://www.cnblogs.com/weschen/p/6773600.html