Docker系列:容器之间的网络通信

Posted weiblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker系列:容器之间的网络通信相关的知识,希望对你有一定的参考价值。

首先我们需要知道:两个容器要能通信,必须要有属于同一个网络的网卡。

先来看下正常情况下我们的容器默认是否是能通信的,这里运行两个测试容器:

docker run -it --name=bbox1 busybox

docker run -it --name=bbox2 busybox

技术分享图片

然后我们进入bbox2容器中,并ping容器bbox1:

技术分享图片

可以发现无法ping通,这是因为容器默认的隔离原因导致的。

从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过“容器名”通信。方法很简单,只要在启动时用 --name 为容器命名就可以了。

首先我们需要创建一个bridge类型的网桥:docker network create --driver bridge --subnet 172.22.16.0/24 --gateway 172.22.16.1 my_net2  

创建完成后可以通过 docker network ls查看:

技术分享图片

然后我们重新运行前面的两个容器,并为他们指定netwoek:

docker run -it --network=my_net2 --name=bbox1 busybox

docker run -it --network=my_net2 --name=bbox2 busybox

然后在bbox2容器中ping容器bbox1:

技术分享图片

使用 docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,这个我们在开始的时候就已经验证过了。

好了,大功告成!

 

以上是关于Docker系列:容器之间的网络通信的主要内容,如果未能解决你的问题,请参考以下文章

Docker深入浅出系列 | 单节点多容器网络通信

09-docker系列-docker网络你了解多少(下)

Docker入门与应用系列介绍和部署

08-docker系列-docker网络你了解多少(上)

在 AWS Beanstalk 中的 docker 网络中的 docker 容器之间进行通信

无法在 localhost 上的 docker 容器之间进行通信