immortalwrt-docker-compose-firewall-docker-zone-nat-forwarding-nikki-dns-issue #2

Open
opened 2026-10-20 16:51:20 +08:00 by dk · 0 comments
Owner

确认两点,然后修正文档。

先回答你的两个问题:

问题 1(你完全正确,而且纠正了我 §8.1 的一处不严谨):「什么都不写」在语法上成立,但在这套环境里,自动建的 <项目>_default 会生成一个新网桥(br- 开头),它不在防火墙 docker zone 的 list device 里,所以出网转发/发布端口确实会不通。要精确说清楚的是:jd.com 的域名解析其实能成功(Nikki 豁免是全局的),但流量转发被防火墙拦了——「解析得出 IP」≠「连得上」。你担心的方向对。

问题 2(4 行写法正确,且 external: true 必须写):那几行是对的、够用。external: true 必须显式指定——它告诉 Compose「这个网络已存在,只许用、不许建/删」。不写的话,Compose 会把这个网络当自己管的,docker compose down 可能把你手动建的 dockercompose 一起删掉。name: dockercompose 也必须写,否则它会去找一个叫 default 的外部网络(不存在)。

现在修正文档:

...

三处修正完成:

位置 修正内容
§8.1 Q1 加了 ⚠️ 提示:语法上不用写 networks,但本环境里自动建的 <项目>_default 网桥不在防火墙 zone 里,出网/端口会不通(DNS 能解析 ≠ 流量能通),推荐写法指向 §8.3
§8.2 新增一张「三层」表,把三个独立环节分开:服务名互访(dockerd 本地,一直正常)/ 外网 DNS(Nikki 豁免,全局)/ 外网转发+端口(fw4 zone,按设备列举)
§8.3 补了多服务示例最后几行的说明:external: true 和 name: dockercompose 都必需,并解释不写 external: true 会导致 down 时误删 dockercompose;还给了等价简写 external: { name: dockercompose }

现在文档里 §8 的表述是自洽的:§8.1 讲语法、§8.2 讲原理(三层)、§8.3 给可直接抄的写法,不会再让你产生「什么都不写就能跑」的误解。

你的理解现在完全正确了:多服务 compose 走 §8.3 的复用 dockercompose 写法(那几行必须写 external: true),单服务/单容器走默认桥,这样既避开防火墙补网桥的麻烦,又享受 Nikki 豁免带来的正常 DNS。还需要我调整别的吗?

确认两点,然后修正文档。 **先回答你的两个问题:** **问题 1(你完全正确,而且纠正了我 §8.1 的一处不严谨)**:「什么都不写」在**语法**上成立,但在这套环境里,自动建的 `<项目>_default` 会生成一个新网桥(`br-` 开头),它**不在防火墙 docker zone 的 `list device` 里**,所以出网转发/发布端口确实会不通。要精确说清楚的是:jd.com 的**域名解析**其实能成功(Nikki 豁免是全局的),但**流量转发**被防火墙拦了——「解析得出 IP」≠「连得上」。你担心的方向对。 **问题 2(4 行写法正确,且 `external: true` 必须写)**:那几行是对的、够用。`external: true` 必须显式指定——它告诉 Compose「这个网络已存在,只许用、不许建/删」。不写的话,Compose 会把这个网络当自己管的,`docker compose down` 可能把你手动建的 `dockercompose` 一起删掉。`name: dockercompose` 也必须写,否则它会去找一个叫 `default` 的外部网络(不存在)。 现在修正文档: ... 三处修正完成: | 位置 | 修正内容 | |---|---| | **§8.1 Q1** | 加了 ⚠️ 提示:语法上不用写 `networks`,但本环境里自动建的 `<项目>_default` 网桥不在防火墙 zone 里,出网/端口会不通(DNS 能解析 ≠ 流量能通),推荐写法指向 §8.3 | | **§8.2** | 新增一张「三层」表,把三个独立环节分开:**服务名互访**(dockerd 本地,一直正常)/ **外网 DNS**(Nikki 豁免,全局)/ **外网转发+端口**(fw4 zone,按设备列举) | | **§8.3** | 补了多服务示例最后几行的说明:`external: true` 和 `name: dockercompose` **都必需**,并解释不写 `external: true` 会导致 `down` 时误删 `dockercompose`;还给了等价简写 `external: { name: dockercompose }` | 现在文档里 §8 的表述是自洽的:**§8.1 讲语法、§8.2 讲原理(三层)、§8.3 给可直接抄的写法**,不会再让你产生「什么都不写就能跑」的误解。 你的理解现在完全正确了:**多服务 compose 走 §8.3 的复用 `dockercompose` 写法(那几行必须写 `external: true`),单服务/单容器走默认桥**,这样既避开防火墙补网桥的麻烦,又享受 Nikki 豁免带来的正常 DNS。还需要我调整别的吗?
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
dk/snippets#2
No description provided.