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#