我有两个容器,我将它们链接在一起,因此到达容器 2 的流量首先经过容器 1。我设置容器 2 --net=none。
主机 --- 容器1 --- 容器2
这是我做的:
CONE=$(docker run --privileged -i -t -p 801:80 CONTAINER_ID /bin/bash)
CTWO=$(docker run --privileged -i -t -p 800:80 --net=none CONTAINER_ID /bin/bash)
pipework br1 $CONE 10.1.0.1/8
pipework br1 $CTWO 10.1.0.2/8
docker exec -ti $CONE apt-get install -y iptables
docker exec -ti $CONE iptables -I POSTROUTING -t nat -o eth0 -j MASQUERADE
docker exec -ti $CTWO ip route add default via 10.1.0.1 dev eth1
docker exec -ti $CTWO ping www.google.com #PING OKAY
因此一切正常,但是从主机我无法 ping 容器 2,但反之亦然。
主机中启用了 IP 转发,因此:
cat /proc/sys/net/ipv4/ip_forward
returns 1
这是 CONE 的路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.42.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
这是 CTWO 的路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.1.0.1 0.0.0.0 UG 0 0 0 eth1
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth1
这是主机的路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
我该怎么做才能 ping 通容器 2?