avatar

LeapHeap Journal

Record moments.

  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
主页 如何在OpenWrt上优雅地配置docker网络
文章

如何在OpenWrt上优雅地配置docker网络

发表于 2026-02-3 更新于 2026-02- 18
作者 LeapHeap
4~5 分钟 阅读

前言

当docker在op宿主机上运行时,网络总是因为openwrt作为家庭网关的特殊性而配置坑点重重。在最新的openwrt上,在docker里通过docker compose自动创建或者用第三方管理面板默认创建的网络默认不能访问互联网,和op所在的局域网之间也没有直接路由,信息传输仅通过publish的端口进行。因此,在这种情况下部署诸如wireguard这种需要和局域网、互联网通讯的服务就会遇到不能上网的问题。本文主要记录这个问题的解决方案。

坑在哪里

造成这个问题的原因,主要是docker默认创建网络的机制。docker创建网络时会新建一个内核临时网桥对象,这个对象处于内核层级,每次开机时会重新创建,也不能被openwrt负责管理网络的处于应用层的netifd管理,因此无法在上面创建uci网络接口,这也就无法顺理成章地进行下一步的配置防火墙规则,导致处于该网络的容器无法上网。

解决方案

openwrt上正确新建网络接口的方法应该先在uci的网络-接口-设备页面里手动创建一个网桥设备,里面的所有设置全部为空并命名,这里的例子命名为br-wg。再来到接口页面使用新建的网桥设备创建一个接口,协议选择不配置,并保存,并为其分配一个防火墙区域。再到防火墙里给该区域赋予转发到你想要的区域的权限,然后使用命令行创建docker网络,并给这个网络指定已有网桥设备(这里是br-wg)。命令示例:

docker network create \
  --driver bridge \
  --subnet 10.42.42.0/24 \
  --gateway 10.42.42.1 \
  -o com.docker.network.bridge.name=br-wg \
  wg

这样我们就得到了一个在openwrt上合法存在的bridge。接下来,进入防火墙为这个接口配置转发到WAN、LAN的规则,就能让网络里的容器拥有指定路由了。

技术, 日志
OpenWrt
许可协议:  CC BY 4.0
分享

相关文章

8月 8, 2026

[备忘] ddns-go docker容器内获取服务器主网卡的稳定ipv6

排除临时v6地址的noprefixroute标记即可。在获取v6地址方式选择by command,使用以下命令: ip -6 addr show dev enp6s0 scope global | awk '/inet6/ && $0 !~ /noprefixroute/ && $2 !~ /^fd

8月 7, 2026

[备忘] OpenClash部署配置简记

背景:2026年8月5日晚从nikki因版本过旧原因迁移到OpenClash新版端。以下是在官方默认配置下做的改动。 插件设置 操作模式 由于个人有依赖UDP的FH5联机需求,所以设置为fakeip-mixed,TUN栈选择Mixed,这样保证UDP流量进TUN透明代理。这也是之前某Youtuber

7月 30, 2026

解决OpenWrt掉IPv6公网的问题

背景:电信宽带,已改桥接,有公网v6。由于存在v6续约超时的bug,所以写一个脚本自动重启wan接口。 创建watchdog主程序 nano /usr/bin/ipv6-watchdog 写入内容: #!/bin/sh ######################################

下一篇

[转载] PVE9 禁用无效订阅提示

上一篇

[转载] Openwrt下dnsmasq强行清理某个DHCP租约

最近更新

  • [备忘] ddns-go docker容器内获取服务器主网卡的稳定ipv6
  • [备忘] OpenClash部署配置简记
  • 解决OpenWrt掉IPv6公网的问题
  • 《红猪》观影笔记
  • Alicks杂记

热门标签

Halo 服务器 Web 博客 OpenWrt

目录

©2026 LeapHeap Journal. 保留部分权利。

使用 Halo 主题 Chirpy