1. 通过IP互联
容器带有虚拟网桥,可以有自己的ip,容器间就可以通过ip进行互相通信
启动两个容器
分别ssh登陆,ifconfig查看自己的ip,例如分别为:
192.168.42.4
192.168.42.5
在 .5 中 ping 192.168.42.4
正常 ping 通,说明这两个容器间的网络沟通没有问题
但有一个新的问题,在容器重启后,他的ip会变,这样的话,容器间使用ip来互相沟通,这时就出现了问题
如何解决?
2. 通过容器名称互联
Docker提供了别名连接方式,让容器间的网络沟通不依赖于ip
先看下指定容器名称的命令
docker run -d -p 22 --name net001 dys/centos:ssh
--name net001 这个参数就给当前容器起了名字:net001
以后就可以直接使用 net001 来做各种操作,例如:
docker stop net001
docker start net001
即使重启docker服务,这个名字不会丢失
service docker restart
docker start net001
再启动一个容器,用参数指定连接 net001
docker run -d -p 22 --name net002 --link net001:lk001 dys/centos:ssh
--link 参数的格式为: --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名
ssh登陆net002,测试连接 net001
ping net001
可以看到连接成功,这样我们就不怕连接目标容器的ip变化了
Docker做了什么?
查看 net002 的 host文件
cat /etc/hosts
可以看到,多了一行配置信息
192.168.42.4 lk001 4193f1ac3f78 net001
net002 中就是通过这条配置找到 net001 的,net001的ip变化时,Docker会自动修改net002 中的这条配置
这样就实现了容器间通过名称来稳定的互相沟通