一、docker容器互联的默认方式

在同一个宿主机下,docker的容器是通过虚拟网桥来进行连接的,在默认情况下在同一宿主机中运行的docker容器都是可以互相连接的,docker提供一个允许容器互相连接的选项:
–icc=true 默认,表示docker允许容器的互相连接

容器的ip地址是一个不可靠的连接,因为它会随着容器的重启而改变,如果我们在docker上提供了一些服务,那么这些服务如果以ip地址的方式来连接,就会在容器重启时失效,这是我们不希望看到的情况,而docker为了避免这种情况提供了另外的一种方式,这就是容器启动时的link选项:
–link
语法:
run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE] [COMMOND]
示例:
1.启动容器cct3,关联容器cct1,别名webtest
docker run -it --name cct3 --link=cct1:webtest e2da955a5469
注意:在容器cct3内部使用env命令查看,cct3使用在很多地方webtest作为环境变量。

二、拒绝所有容器间的互联

Docker守护进程的启动选项
–icc=false
Ubuntu 操作系统请使用如下步骤:
步骤1、使用命令:vi /etc/default/docker修改docker的启动文件,在文件末尾追加
DOCKER_OPTS="–icc=false"
步骤2、重启docker服务,命令如下:
service docker restart

Centos7 操作系统请使用如下步骤:
步骤1、使用命令:vi /etc/docker/daemon.json编辑daemon.json添加如下内容:

{
 …
 “icc”: false,
 …
 }


步骤2、使用命令:systemctl restart docker重启docker;
注意:此时直接ping容器的ip地址或者ping添加link选项的容器都不通。

三、允许特定容器间的连接

Docker守护进程的启动选项
–icc=false --iptables=true
–link 在容器启动时添加link
docker利用iptables中的机制,在icc=false时,阻断所有的docker容器间的访问,仅仅运行利用link选项配置的容器进行相互的访问。
注: 如果出现ping不通的情况,可能为iptables的问题(DROP规则在docker之前了)。

Ubuntu 操作系统请使用如下步骤:
步骤1、使用命令:vi /etc/default/docker修改docker的启动文件,在文件末尾追加
DOCKER_OPTS="–icc=false --iptables=true"
步骤2、重启docker服务,命令如下:
service docker restart
sudo iptables -L -n 查看iptables规则的情况
sudo iptables -F 清空iptables规则设置
sudo service docker restart 重新启用docker的服务
sudo iptables -L -n 再来查看iptables的设置,docker的规则链已经在第一位

Centos7 操作系统请使用如下步骤:
步骤1、使用命令:vi /etc/docker/daemon.json编辑daemon.json添加如下内容:
{
    ...
    "icc": false,
    "iptables": true,
    ...
}
步骤2、使用命令:systemctl restart docker重启docker;
注意:在centos7中没有成功,不确定是不是docker的bug