<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://photonicat.com/index.php?action=history&amp;feed=atom&amp;title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97</id>
	<title>Photonicat 2 Docker 使用指南 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://photonicat.com/index.php?action=history&amp;feed=atom&amp;title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97"/>
	<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;action=history"/>
	<updated>2026-07-26T16:17:01Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://photonicat.com/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;diff=920&amp;oldid=prev</id>
		<title>C2h2：​New topic: Docker on photonicat 2 — dockerman/compose, /opt data-root, wan_mode, and the Docker-27 ip6tables IPv6 pitfall with correct fix</title>
		<link rel="alternate" type="text/html" href="https://photonicat.com/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;diff=920&amp;oldid=prev"/>
		<updated>2026-07-12T16:47:14Z</updated>

		<summary type="html">&lt;p&gt;New topic: Docker on photonicat 2 — dockerman/compose, /opt data-root, wan_mode, and the Docker-27 ip6tables IPv6 pitfall with correct fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 适用 / Applies to&lt;br /&gt;
| Photonicat 2, photonicatWrt 26.04.x（Docker 27.0.2, docker-compose v2.28, LuCI dockerman） / Photonicat 2, photonicatWrt 26.04.x (Docker 27.0.2, docker-compose v2.28, LuCI dockerman)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
photonicatWrt 26.04 出厂即带完整 Docker 环境：&amp;#039;&amp;#039;&amp;#039;Docker Engine 27.0.2 + docker-compose v2 + LuCI 图形管理（dockerman）&amp;#039;&amp;#039;&amp;#039;。本页覆盖日常使用、存储位置、防火墙行为，以及一个&amp;#039;&amp;#039;&amp;#039;影响全网 IPv6 的重要坑&amp;#039;&amp;#039;&amp;#039;及其正确修复方式。1 代用户请参考 [[Photonicat Openwrt Docker/istore]]。&lt;br /&gt;
&lt;br /&gt;
photonicatWrt 26.04 ships a complete Docker stack: &amp;#039;&amp;#039;&amp;#039;Docker Engine 27.0.2 + docker-compose v2 + the LuCI dockerman GUI&amp;#039;&amp;#039;&amp;#039;. This page covers daily use, storage, firewall behavior, and one &amp;#039;&amp;#039;&amp;#039;important pitfall that breaks IPv6 for the whole LAN&amp;#039;&amp;#039;&amp;#039; plus its correct fix. Gen-1 users see [[Photonicat Openwrt Docker/istore]].&lt;br /&gt;
&lt;br /&gt;
== 中文说明 ==&lt;br /&gt;
&lt;br /&gt;
=== 使用入口 ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;图形界面&amp;#039;&amp;#039;&amp;#039;：LuCI → Docker（dockerman），可管理镜像、容器、网络、卷。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;命令行&amp;#039;&amp;#039;&amp;#039;（SSH）：&amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; 与 &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; 均可直接使用：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker info | grep -E &amp;#039;Server Version|Root Dir&amp;#039;&lt;br /&gt;
docker run -d --name uptime-kuma -p 3001:3001 louislam/uptime-kuma&lt;br /&gt;
docker compose up -d        # 在含 docker-compose.yml 的目录下&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 存储位置 ===&lt;br /&gt;
* 镜像/容器数据目录（data-root）由出厂的 &amp;lt;code&amp;gt;/etc/docker/daemon.json&amp;lt;/code&amp;gt; 指定为 &amp;#039;&amp;#039;&amp;#039;/opt&amp;#039;&amp;#039;&amp;#039;，位于系统 overlay 分区（约 3.7 GB）。&lt;br /&gt;
* 跑多个容器建议把大数据挂到 &amp;#039;&amp;#039;&amp;#039;NVMe/SD&amp;#039;&amp;#039;&amp;#039; 上：优先用 &amp;lt;code&amp;gt;-v /mnt/nvme/...:/data&amp;lt;/code&amp;gt; 挂卷，而不是搬移 data-root。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;不要随意改 data-root&amp;#039;&amp;#039;&amp;#039;：改了之后已有镜像会&amp;quot;消失&amp;quot;（其实还在旧目录占着空间）。&lt;br /&gt;
&lt;br /&gt;
=== 防火墙行为（wan_mode） ===&lt;br /&gt;
Docker 由 &amp;lt;code&amp;gt;/etc/init.d/docker&amp;lt;/code&amp;gt; 启动，行为由 UCI 选项控制：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uci show docker            # docker.@docker[0].wan_mode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode=&amp;#039;0&amp;#039;&amp;lt;/code&amp;gt;（默认）：以 &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; 启动——Docker &amp;#039;&amp;#039;&amp;#039;不改动 IPv4 防火墙&amp;#039;&amp;#039;&amp;#039;，规则完全由 fw4 掌管，端口发布经用户态代理转发。最干净、推荐。&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode=&amp;#039;1&amp;#039;&amp;lt;/code&amp;gt;：允许 Docker 自行管理 iptables（容器间隔离、DNAT 端口映射由 Docker 负责）。需要复杂容器网络时才用。&lt;br /&gt;
&lt;br /&gt;
=== ⚠ 重要坑：Docker 27 默认接管 IPv6 防火墙 ===&lt;br /&gt;
即使 &amp;lt;code&amp;gt;wan_mode=&amp;#039;0&amp;#039;&amp;lt;/code&amp;gt;（IPv4 不接管），&amp;#039;&amp;#039;&amp;#039;Docker 27 起 ip6tables 是独立开关且默认开启&amp;#039;&amp;#039;&amp;#039;：启动时会创建 &amp;lt;code&amp;gt;ip6 filter FORWARD&amp;lt;/code&amp;gt; 链并置 &amp;#039;&amp;#039;&amp;#039;policy drop&amp;#039;&amp;#039;&amp;#039; —— 结果是&amp;#039;&amp;#039;&amp;#039;路由器不再转发任何 IPv6&amp;#039;&amp;#039;&amp;#039;，内网设备拿到公网 IPv6 地址却上不了网（fw4 放行也无效，因为两条链是&amp;quot;与&amp;quot;关系）。&lt;br /&gt;
&lt;br /&gt;
检查是否中招：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nft list chain ip6 filter FORWARD&lt;br /&gt;
# 看到 &amp;quot;policy drop&amp;quot; 且计数增长 = 中招&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;正确修复&amp;#039;&amp;#039;&amp;#039;：在出厂 daemon.json 基础上&amp;#039;&amp;#039;&amp;#039;追加&amp;#039;&amp;#039;&amp;#039;一行 &amp;lt;code&amp;gt;&amp;quot;ip6tables&amp;quot;: false&amp;lt;/code&amp;gt;：&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/docker/daemon.json &amp;lt;&amp;lt;&amp;#039;EOF&amp;#039;&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;data-root&amp;quot;: &amp;quot;/opt/&amp;quot;,&lt;br /&gt;
&amp;quot;log-level&amp;quot;: &amp;quot;warn&amp;quot;,&lt;br /&gt;
&amp;quot;ip6tables&amp;quot;: false&lt;br /&gt;
}&lt;br /&gt;
EOF&lt;br /&gt;
/etc/init.d/docker restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;三个不要&amp;#039;&amp;#039;&amp;#039;：&lt;br /&gt;
# 不要删除/改动出厂的 &amp;lt;code&amp;gt;data-root&amp;lt;/code&amp;gt;（镜像会&amp;quot;消失&amp;quot;，见上）；&lt;br /&gt;
# 不要往 daemon.json 添加 &amp;lt;code&amp;gt;&amp;quot;iptables&amp;quot;&amp;lt;/code&amp;gt; 键——它与启动参数 &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; 冲突，&amp;#039;&amp;#039;&amp;#039;Docker 会在下次开机拒绝启动&amp;#039;&amp;#039;&amp;#039;（dockerd 对&amp;quot;同一项既是命令行参数又在配置文件&amp;quot;直接报错退出）；&lt;br /&gt;
# 不要用 &amp;lt;code&amp;gt;ip6tables -P FORWARD ACCEPT&amp;lt;/code&amp;gt; 之类的手工命令当永久方案——重启后 Docker 会重建 drop 链。&lt;br /&gt;
&lt;br /&gt;
=== 两个启动脚本的说明 ===&lt;br /&gt;
系统里同时存在两个 Docker 启动脚本，实际生效的是前者：&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/init.d/docker&amp;lt;/code&amp;gt;（S25，luci-app-docker 提供）：开机先启动，读取 UCI &amp;lt;code&amp;gt;docker.wan_mode&amp;lt;/code&amp;gt;，&amp;#039;&amp;#039;&amp;#039;真正拉起 dockerd&amp;#039;&amp;#039;&amp;#039;。dockerd 会自动读取默认配置文件 &amp;lt;code&amp;gt;/etc/docker/daemon.json&amp;lt;/code&amp;gt;——这就是上面修复生效的原因。&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/init.d/dockerd&amp;lt;/code&amp;gt;（S99，OpenWrt 标准包）：开机时 dockerd 已在运行，它的实例不会生效；其 UCI 配置（/etc/config/dockerd）对实际运行的 Docker &amp;#039;&amp;#039;&amp;#039;基本无效&amp;#039;&amp;#039;&amp;#039;。排障时别被它误导。&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
=== Entry points ===&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUI&amp;#039;&amp;#039;&amp;#039;: LuCI → Docker (dockerman) — images, containers, networks, volumes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;CLI&amp;#039;&amp;#039;&amp;#039; (SSH): both &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; work out of the box (see examples above).&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
* The data-root is set by the factory &amp;lt;code&amp;gt;/etc/docker/daemon.json&amp;lt;/code&amp;gt; to &amp;#039;&amp;#039;&amp;#039;/opt&amp;#039;&amp;#039;&amp;#039; on the system overlay (~3.7 GB).&lt;br /&gt;
* For heavy use, keep bulky data on &amp;#039;&amp;#039;&amp;#039;NVMe/SD&amp;#039;&amp;#039;&amp;#039; via bind mounts (&amp;lt;code&amp;gt;-v /mnt/nvme/...:/data&amp;lt;/code&amp;gt;) rather than moving the data-root.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Don&amp;#039;t casually change data-root&amp;#039;&amp;#039;&amp;#039; — existing images &amp;quot;disappear&amp;quot; (while still consuming space in the old location).&lt;br /&gt;
&lt;br /&gt;
=== Firewall behavior (wan_mode) ===&lt;br /&gt;
Docker is launched by &amp;lt;code&amp;gt;/etc/init.d/docker&amp;lt;/code&amp;gt;, controlled by UCI:&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode=&amp;#039;0&amp;#039;&amp;lt;/code&amp;gt; (default): started with &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; — Docker &amp;#039;&amp;#039;&amp;#039;never touches the IPv4 firewall&amp;#039;&amp;#039;&amp;#039;; fw4 owns all rules and published ports go through the userland proxy. Cleanest, recommended.&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode=&amp;#039;1&amp;#039;&amp;lt;/code&amp;gt;: Docker manages iptables itself (container isolation, DNAT port mapping). Only for complex container networking.&lt;br /&gt;
&lt;br /&gt;
=== ⚠ The big pitfall: Docker 27 hijacks the IPv6 firewall by default ===&lt;br /&gt;
Even with &amp;lt;code&amp;gt;wan_mode=&amp;#039;0&amp;#039;&amp;lt;/code&amp;gt;, &amp;#039;&amp;#039;&amp;#039;ip6tables is a separate switch, enabled by default since Docker 27&amp;#039;&amp;#039;&amp;#039;: at startup it creates an &amp;lt;code&amp;gt;ip6 filter FORWARD&amp;lt;/code&amp;gt; chain with &amp;#039;&amp;#039;&amp;#039;policy drop&amp;#039;&amp;#039;&amp;#039; — the router &amp;#039;&amp;#039;&amp;#039;stops forwarding all IPv6&amp;#039;&amp;#039;&amp;#039;. LAN clients hold global IPv6 addresses but can&amp;#039;t reach the internet, and fw4&amp;#039;s accepts don&amp;#039;t help (the chains AND together).&lt;br /&gt;
&lt;br /&gt;
Check: &amp;lt;code&amp;gt;nft list chain ip6 filter FORWARD&amp;lt;/code&amp;gt; — &amp;quot;policy drop&amp;quot; with a growing counter means you&amp;#039;re hit.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Correct fix&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;&amp;#039;append&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;&amp;quot;ip6tables&amp;quot;: false&amp;lt;/code&amp;gt; to the factory daemon.json (full file above), then &amp;lt;code&amp;gt;/etc/init.d/docker restart&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Three don&amp;#039;ts&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
# Don&amp;#039;t remove/alter the factory &amp;lt;code&amp;gt;data-root&amp;lt;/code&amp;gt; (images &amp;quot;disappear&amp;quot;, see above);&lt;br /&gt;
# Don&amp;#039;t add an &amp;lt;code&amp;gt;&amp;quot;iptables&amp;quot;&amp;lt;/code&amp;gt; key — it conflicts with the launch flag &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; and &amp;#039;&amp;#039;&amp;#039;dockerd refuses to start at next boot&amp;#039;&amp;#039;&amp;#039; (it hard-errors when the same directive is both a flag and in the config file);&lt;br /&gt;
# Don&amp;#039;t rely on manual &amp;lt;code&amp;gt;ip6tables -P FORWARD ACCEPT&amp;lt;/code&amp;gt; — Docker recreates the drop chain after a reboot.&lt;br /&gt;
&lt;br /&gt;
=== About the two init scripts ===&lt;br /&gt;
Two Docker init scripts coexist; the first one wins:&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/init.d/docker&amp;lt;/code&amp;gt; (S25, from luci-app-docker): starts first at boot, reads UCI &amp;lt;code&amp;gt;docker.wan_mode&amp;lt;/code&amp;gt;, and &amp;#039;&amp;#039;&amp;#039;actually launches dockerd&amp;#039;&amp;#039;&amp;#039;. dockerd reads the default config file &amp;lt;code&amp;gt;/etc/docker/daemon.json&amp;lt;/code&amp;gt; — which is why the fix above works.&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/init.d/dockerd&amp;lt;/code&amp;gt; (S99, the standard OpenWrt package): by the time it runs, dockerd is already up, so its instance never takes effect; its UCI config (/etc/config/dockerd) is &amp;#039;&amp;#039;&amp;#039;effectively inert&amp;#039;&amp;#039;&amp;#039; on this firmware. Don&amp;#039;t let it mislead you while debugging.&lt;br /&gt;
&lt;br /&gt;
[[Photoincat 2 IPv6 PPPoE]] ｜ [[Photonicat Openwrt Docker/istore]] ｜ [[Photonicat 2 管理界面新功能 (2026)]]&lt;/div&gt;</summary>
		<author><name>C2h2</name></author>
	</entry>
</feed>