目 录CONTENT

文章目录

OpenWRT中的docker网络配置

成培培
2026-07-09 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

最近升级了软路由的OpenWRT系统后,规划docker网络是个麻烦的事情,原来一直是创建一个自定义的docker network,启动容器时指定IP即可,这样容器到软路由或者内网其他设备之间都是互通的,也不需要映射端口。但是升级了OpenWRT系统后就不行了,自定义的docker network不管是跟宿主机还是内网其他设备都是不能互通的很奇怪。

问题现象

通过docker network create创建的自定义网络172.20.0.0/24,跟宿主机都不能互通,但是测试不指定自定义的网络,用默认的网络又可以互通,但是问题在于默认网络无法指定IP地址,这样每次重启软路由容器IP可能都会发生变化,不方便我进行端口映射。
原因好像是因为新版本的OpenWRT使用的 fw4/nftables 与 Docker 默认使用的 iptables 规则存在兼容性问题,但严格来说不是简单的“iptables 冲突”,而是两套防火墙管理体系并存导致规则无法按预期生效。
所以我想到能不能直接把自定义网络生成的网桥设备br-xxxxxx直接挂接到接口docker0上去,但是操作后发现接口里修改docker0,设备选br-xxxxxx一保存,这个网桥设备就没了!后来了解到:

Docker 创建的网桥设备属于 Docker 管理对象,不属于 OpenWrt 网络配置管理对象,OpenWrt 保存配置后,netifd 会尝试接管这个设备。但是 Docker 的 bridge network 设备生命周期由 Docker daemon 管理,当OpenWrt 网络服务重载时:netifd 重载网络、删除未知/非配置管理的 bridge、Docker bridge 被删除

反正无法在openwrt的接口编辑里选择Docker创建的网桥设备。

解决方案

既然不能选择Docker创建的网桥设备,那我可不可以先在OpenWRT里创建网桥设备,然后docker network create时指定网桥设备呢,经过尝试确实可以,我现在接口-设备-添加设备配置里添加设备类型网桥,指定一个名称docker1,其实就是增加以下配置到/etc/config/network

config device
	option type 'bridge'
	option name 'docker1'

然后创建接口dockervlan,指定这个网桥设备,同时防火墙配置指定到区域docker
网桥设备、接口准备好后,再使用以下命令创建docker网络:

docker network create \
  --driver bridge \
  --subnet 172.20.0.0/24 \
  --gateway 172.20.0.1 \
  --opt com.docker.network.bridge.name=docker1 \
  docker_vlan

这时创建的网络就是直接使用OpenWRT中创建的网桥了,同时记得防火墙配置里,把docker到lan区域的转发打开

最终效果

网络准备好后,再通过以下命令创建容器:

docker run --restart=always --network docker_vlan --ip 172.20.0.2 --name registry -d  registry:2

这时创建的容器即有固定IP也可以和内网互通了,外网要访问指定容器的服务就可以在端口映射里直接指定172.20.0.0/24这个网段的IP端口了

0

评论区