容器不能联网
使用docker默认的桥接模式(bridge)无法对外访问网络,主要是转发NAT FWD导致的
测试是否可以上网
docker run --rm alpine ping -c 3 www.baidu.com

或者先重启防火墙 /etc/init.d/firewall restart
然后 docker run --rm alpine ping -c 3 www.baidu.com
linux
sysctl net.ipv4.ip_forward
查看转发情况,正常应该是 1
sysctl -w net.ipv4.ip_forward=1
sysctl -popenwrt
单网口的这样配置,直接改 lan为dhcp客户端,关闭dhcp server
config device
option name 'br-lan'
option type 'bridge'
list ports 'eth0'
config interface 'lan'
option device 'br-lan'
option proto 'dhcp'
docker里面配置,在wan口允许访问:

如果没有上述设置,那么改这里

LEDE QWRT需配置防火墙
config nat 'docker_nat'
option name 'DockerNAT'
option proto 'all'
option src 'lan'
option target 'MASQUERADE'
option extra '-i docker0'
config zone 'docker'
option name 'docker'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option auto_helper '0'
list device 'docker0'
config forwarding 'docker_to_wan'
option src 'docker'
option dest 'wan'
config forwarding 'docker_to_lan'
option src 'docker'
option dest 'lan'
config forwarding 'lan_to_docker'
option src 'lan'
option dest 'docker'
- 增加NAT


+修改Docker区域

手动启动防火墙
很怪异的事情, 只需配好Docker的防火墙,然后手动启动防火墙 '/etc/init.d/firewall restart`
容器就可以正常使用外网了,猜测是因为防火墙先加了规则,当时docker还没有启动docker0等网络.
导致防火墙规则不起效.
+解决方法
vi /ect/rc.local
加入一行延时重启防火墙 nohup bash -c "sleep 10; /etc/init.d/firewall restart" >/dev/null 2>&1 &
或者修改 /etc/init.d/dockerd 启动docker复位后,重启防火墙
grep -q "/etc/init.d/firewall restart" /etc/init.d/dockerd || sed -i '/procd_close_instance/a /etc/init.d/firewall restart' /etc/init.d/dockerd
猫哥最后一招
iptables -t nat -A POSTROUTING -s 172.17.0.0/255.255.255.0 -o eth0.2 -j MASQUERADE
其中 eth0.2是wan口

还搞不定?
佳佳asr3000: 为啥要桥模式, 直接用主机网络 --net=host

