目录
怎样实现容器之间的相互通信?
情况1:两个容器在同一网段上
情况2:两个容器在不同网段上
怎样实现容器之间的相互通信?
情况1:两个容器在同一网段上
命令拓展:
删除所有容器:docker rm -f $(docker ps -aq)
查看所有的网络模式:docker network ls
清空控制台:clear
删除自定义网络:docker network rm mynetwork【公式:docker network rm 网络名称】
为了接下里的演示,我把原有的自定义网络mynetwork都删干净了。
①创建一个自定义网络
docker network create --driver bridge --subnet 192.168.0.1/16 --gateway 192.168.0.1 mynet
【参数说明:
--driver bridge 设置网络模式
--subnet 192.168.0.1/16 设置子网
--gateway 192.168.0.1 设置网关
mynet 自定义网络的名称】
②在刚才创建的mynet中创建两个容器
docker run -di --name c1 --net=mynet centos:7
docker run -di --name c2 --net=mynet centos:7
【-di不是守护进程方式所以不会进入容器,-it才是守护进程方式】
创建成功!
③测试 ping
现在使用守护进程的方式启动容器,看看在c1中ping c2是否能够成功:
成功!反之,在c2中ping c1 也是可以成功的
则代表两个容器之间互通成功!
还有另外一种方法不进入容器也可以检测容器之间是否互通(前提是容器是启动)
启动容器后检查网络之间是否可以互通
docker exec -it c1 ping c2
成功!
结论:
两个容器在同一网段上是可以互通的。
情况2:两个容器在不同网段上
①创建一个自定义网络(但不指定在刚才创建的mynet网络上)
docker run -di --name c3 centos:7
此时c1 ping c2 当然是成功的,因为 这两个容器是在同一网络上
现在来测试一下c1和c3进行ping,看看是否能成功
ping失败,互通失败,并且提示Name or servic not know,意思是找不到服务器或名字。
这时候我们就需要把c3添加到mynet网络上来就可以了。
②将外界容器添加到项目容器中来
docker network connect mynet c3
【公式:docker network connect 自定义网络名称 要添加的容器名】
这样c3 ping c1就成功啦!
比如说以后要是在公司,某位领导在不是同一网络下时需要使用他自己的电脑查看项目,那么我们就只需把他电脑服务器添加进来就好了。