openwrt 的docker无法联网的问题

这个好像也是openwrt的问题。。

临时方法,用host网络解决

例如创建一个支持sshd的alpine

1
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 执行命令

iptables -t nat -A POSTROUTING -s 172.17.0.1/16 ! -o docker0 -j MASQUERADE   

注意172.17.0.1要修改成的你自己的docker的桥接地址段

查看方式

1
2
docker network ls  # 看一下 bridge 对的那一串id
docker network inspect 1914ac9dc9c9 | grep Subnet   # 1914ac9dc9c9 是上面对应的那一串id

最后需要重启一下docker

 /etc/init.d/dockerd restart

进阶

把docker作为内网的一台机器使用

因为没有系统的学习过docker,简单看了一下手册就用了多年,一直不知道docker的虚拟网络是怎么玩的,在一次使用路由器的国产垃圾固件爱快的时候发现了他默认的docekr网络模式,然后才去翻看手册

可以实现,自定义docker的ip端, 并实现 网内机器互联,并可以在路由上直接转发对应的端口

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
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计