【发布时间】:2016-11-12 17:27:16
【问题描述】:
问题:docker 容器中没有互联网连接。
症状:ping 8.8.8.8 不起作用。来自主机系统的 Wireshark 回馈:
19 10.866212113 172.17.0.2 -> 8.8.8.8 ICMP 98 Echo (ping) request id=0x0009, seq=0/0, ttl=64
20 11.867231972 172.17.0.2 -> 8.8.8.8 ICMP 98 Echo (ping) request id=0x0009, seq=1/256, ttl=64
21 12.868331353 172.17.0.2 -> 8.8.8.8 ICMP 98 Echo (ping) request id=0x0009, seq=2/512, ttl=64
22 13.869400083 172.17.0.2 -> 8.8.8.8 ICMP 98 Echo (ping) request id=0x0009, seq=3/768, ttl=64
但是!如果容器以--net=host 启动,互联网将完美运行。
到目前为止我尝试过的:
- altering DNS
- 将
--ip-masq=true添加到/etc/default/docker(关闭重启) - 启用与 masquerade / ip_forward 相关的所有内容
- 更改默认路由
- 所有建议here
主机配置:
$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.4.2.1 0.0.0.0 UG 0 0 0 eno1.3001
default 10.3.2.1 0.0.0.0 UG 100 0 0 eno2
10.3.2.0 * 255.255.254.0 U 100 0 0 eno2
10.4.2.0 * 255.255.254.0 U 0 0 0 eno1.3001
nerv8.i 10.3.2.1 255.255.255.255 UGH 100 0 0 eno2
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
sudo iptables -L, cat /etc/network/interfaces, ifconfig, iptables -t nat -L -nv
一切正常,转发也开启了:
$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
【问题讨论】:
-
docker 的版本(
docker --version)、底层主机(uname -a)、您使用的 Dockerimage 的名称以及您用于运行容器的命令是什么? -
$ docker --version Docker 版本 1.11.2,构建 b9f10c9 $ uname -a Linux 4.4.0-28-generic #47-Ubuntu SMP 16.04
标签: networking docker iptables