一、docker中运行的不同容器之间是允许网络互通的,可以通过–icc=false 来关闭容器之间的通信
打开启动服务文件:vim /usr/lib/systemd/system/docker.service
在ExecStart中添加–icc=false
重启服务:systemctl restart docker
运行两个容器:
docker run -d -h web1 nginx_php:1.12.2
docker run -d -h web2 nginx_php:1.12.2
进入到web1,ping web2发现就不能ping通了
当有两个容器之间需要通信该怎么办呢?这里可以创建一个点到点的连接来实现不同容器之间的通信
二、创建一个点到点连接
1、首先启动 2 个容器
docker run -d --name web3 -h web3 nginx_php:1.12.2
docker run -d --name web4 -h web4 nginx_php:1.12.2
2、找到进程号, 然后创建网络命名空间的跟踪文件
[root@jumpserver ~]# docker inspect -f '{{.State.Pid}}' web3
14401
[root@jumpserver ~]# docker inspect -f '{{.State.Pid}}' web4
14479
[root@jumpserver ~]# mkdir -p /var/run/netns
[root@jumpserver ~]# ln -s /proc/14401/ns/net /var/run/netns/14401
[root@jumpserver ~]# ln -s /proc/14479/ns/net /var/run/netns/14479
3、创建一对 peer 接口, 然后配置路由
[root@jumpserver ~]# ip link add A type veth peer name B
[root@jumpserver ~]# ip link set A netns 14401
[root@jumpserver ~]# ip netns exec 14401 ip addr add 10.1.1.1/32 dev A
[root@jumpserver ~]# ip netns exec 14401 ip link set A up
[root@jumpserver ~]# ip netns exec 14401 ip route add 10.1.1.2/32 dev A
[root@jumpserver ~]# ip link set B netns 14479
[root@jumpserver ~]# ip netns exec 14479 ip addr add 10.1.1.2/32 dev B
[root@jumpserver ~]# ip netns exec 14479 ip link set B up
[root@jumpserver ~]# ip netns exec 14479 ip route add 10.1.1.1/32 dev B
进入到web3里面,通过ip a s 可以看到用于点到点通信的接口IP
web4上:
在web3上ping web4的10.1.1.2
这就实现了两个容器之间的点到点通信。
通过关闭容器之间的通信和点到点技术,可以减少不同容器之间的干扰,提高容器的安全