Docker只有两个容器之间通信,而不被外部发现

docker 容器启动的时候默认--net=bridge,即将容器绑定到docker网桥上,此时在宿主机上可以ping通该容器,有时候我们就像让两个容器之间可以通信,而不被外界所发现,则可以这样做:

#本次操作以两个centos容器为例进行
#首先启动两个容器,并设置--net=none,这样就不会自动将容器绑定到docker0上了
docker run --name centos1 --net=none  -d -it centos:latest /bin/bash
docker run --name centos2 --net=none  -d -it centos:latest /bin/bash

#查看两个容器的pid,可以通过ps -ef|grep centos来看,推荐使用下面的方式
docker inspect -f '{{.State.Pid}}' centos1
假设返回值为123
docker inspect -f '{{.State.Pid}}' centos1
假设返回值为456

#创建网络命名空间的跟踪文件
mkdir -p /var/run/netns
ln -s /proc/123/ns/net /var/run/netns/123
ln -s /proc/456/ns/net /var/run/netns/456

#创建一对peer接口,可以想象成一根网线的两个水晶头
ip link add A type veth peer name B

#配置ip地址和路由
ip link set A netns 123
ip netns exec 123 ip addr add 172.17.0.33/32 dev A        //设置A的IP地址
ip netns exec 123 ip link set A up
ip netns exec 123 ip route add 172.17.0.34/32 dev A        //设置A的路由,指向B的ip地址

ip link set B netns 456
ip netns exec 456 ip addr add 172.17.0.34/32 dev B        //设置B的IP地址,和上面对应
ip netns exec 456 ip link set B up
ip netns exec 456 ip route add 172.17.0.33/32 dev B        //设置B的路由,指向A的ip地址


可以进入容器中发现可以ping通对方,而在宿主机中并不能ping通这些容器,打完收工~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值