Docker安装完成之后,会默认在宿主机上增加一些iptables规则,方便Docker容器和容器以及外界通信。

可以通过iptables-save 命令查看

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

上面规则关系着Docker容器和外界的通信,表示将源地址172.17.0.0/16的数据包,当不是从docker0发出时,进行SNAT。

现在,运行容器

$ sudo docker run -d -p 5000:5000 training/webapp python app.py

查看iptables规则

$ sudo iptables-save
...
*nat
-A DOCKER ! -i docker0 -p tcp -m tcp -dport 5000 -j DNAT --to-destination 172.17.0.4:5000
...
*filter
-A DOCKER -d 172.17.0.4/32 ! -i docker0 -o docker0 -p tcp -m tcp -dport 5000 -j ACCEPT

当docker容器允许容器间通信时(--icc=true)

-A FORWARD -i docker0 -o docker0 -j ACCEPT

Docker容器和外界通信还涉及数据包在多个网卡之间的转发,这需要内核将ip-forward功能打开,docker启动是会默认--ip-forward=true 。或者是修改配置

$ echo 1> /proc/sys/net/ipv4/ip_forward
$ cat /proc/sys/net/ipv4/ip_forward

results matching ""

    No results matching ""