openwrt 的docker无法联网的问题
这个好像也是openwrt的问题。。
#临时方法,用host网络解决
例如创建一个支持sshd的alpine
plaintext
docker run -i -t -d --name alpine-sshd --network host --privileged=true --restart=always alpine:sshd-autoboot.sh2222 sh /autoboot.sh
当然不能和宿主机的端口冲突。。。 这个问题不算彻底解决 ,用host的方式 如果多个容器使用同样的默认端口 就 gg了
#彻底解决
如果要彻底解决,还是要修改防火墙设置
打开 openwrt的网络设置,Luci>网络>防火墙>Luci>网络>防火墙>转发:接受 (Forward:accept)http://**/cgi-bin/luci/admin/network/firewall
然后 shell登录到openwrt 执行命令
plaintext
iptables -t nat -A POSTROUTING -s 172.17.0.1/16 ! -o docker0 -j MASQUERADE
注意172.17.0.1要修改成的你自己的docker的桥接地址段
查看方式
plaintext
docker network ls # 看一下 bridge 对的那一串id
docker network inspect 1914ac9dc9c9 | grep Subnet # 1914ac9dc9c9 是上面对应的那一串id
最后需要重启一下docker
plaintext
/etc/init.d/dockerd restart
#进阶
#把docker作为内网的一台机器使用
因为没有系统的学习过docker,简单看了一下手册就用了多年,一直不知道docker的虚拟网络是怎么玩的,在一次使用路由器的国产垃圾固件爱快的时候发现了他默认的docekr网络模式,然后才去翻看手册
可以实现,自定义docker的ip端, 并实现 网内机器互联,并可以在路由上直接转发对应的端口
plaintext
docker network create --subnet=10.0.100.1/24 mynet # 删除命令 docker network rm mynet
docker run -i -t -d --name alpine-188 --network=mynet --ip 10.0.100.188 --privileged=true --restart=always alpine:sshd-autoboot.sh2222 sh /autoboot.sh