avatar

LeapHeap Journal

Record moments.

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

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

发表于 2026-02-3 更新于 30天前
作者 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
分享

相关文章

3月 7, 2026

在PVE里使用虚拟串口与虚拟机进行命令行交互

起因 在pve中,如果给虚拟机直通了物理显卡,此虚拟机在加载显卡驱动后就会默认使用直通显卡输出视频流,因此pve对于这个虚拟机的基于虚拟显卡的VNC控制台就无法使用了,虚拟机进入“Headless”状态。因此,为了在这种情况下仍然能通过控制台与虚拟机交互,就需要使用虚拟串口。 实战操作 添加硬件接口

3月 7, 2026

使用Docker部署网页版MeshCommander

简介 MeshCommander作为一款方便的第三方英特尔AMT客户端,本质上是一个可通过NPM部署的网页应用,但是官网只发布了官方打包好的桌面客户端。为了方便异地访问时直接在内网使用,故在路由器上部署一个由他人打包好的MeshCommander网页客户端。 前置条件 一台已经安装了Docker的主

3月 7, 2026

使用nginx给Halo后端补上favicon.ico

Halo默认不使用传统的favicon.ico,而是动态载入图标文件,因此某些浏览器认为网站没有图标。所以我使用nginx反代时手动指定nginx返回favicon.ico。 # 精确匹配 favicon.ico 请求 location = /favicon.ico { #

下一篇

[备忘] 解决openwrt掉ipv6

上一篇

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

最近更新

  • 在PVE里使用虚拟串口与虚拟机进行命令行交互
  • 使用Docker部署网页版MeshCommander
  • 使用nginx给Halo后端补上favicon.ico
  • 修复微软游戏服务导致的地平线5Xbox版异常
  • 在PVE/Debian上部署UPS状态监控的网页插件

热门标签

Halo 服务器 Web 博客 OpenWrt

目录

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

使用 Halo 主题 Chirpy