<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.photonicat.cn/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://wiki.photonicat.cn/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://wiki.photonicat.cn/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;action=history"/>
	<updated>2026-08-31T05:08:03Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki.photonicat.cn/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;diff=257&amp;oldid=prev</id>
		<title>Guangyingmao：​创建页面，内容为“{| class=&quot;wikitable&quot; |- ! 适用 / Applies to | 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) |}  photonicatWrt 26.04 出厂即带完整 Docker 环境：'''Docker Engine 27.0.2 + docker-compose v2 + LuCI 图形管理（dockerman）'''。本页覆盖日常使用、存储位置、防火墙行为，以及一个'''影响全网 I…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.photonicat.cn/index.php?title=Photonicat_2_Docker_%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97&amp;diff=257&amp;oldid=prev"/>
		<updated>2026-08-30T06:33:53Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“{| class=&amp;quot;wikitable&amp;quot; |- ! 适用 / Applies to | 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) |}  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;影响全网 I…”&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 环境：'''Docker Engine 27.0.2 + docker-compose v2 + LuCI 图形管理（dockerman）'''。本页覆盖日常使用、存储位置、防火墙行为，以及一个'''影响全网 IPv6 的重要坑'''及其正确修复方式。1 代用户请参考 [[Photonicat Openwrt Docker/istore]]。&lt;br /&gt;
&lt;br /&gt;
photonicatWrt 26.04 ships a complete Docker stack: '''Docker Engine 27.0.2 + docker-compose v2 + the LuCI dockerman GUI'''. This page covers daily use, storage, firewall behavior, and one '''important pitfall that breaks IPv6 for the whole LAN''' 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;
* '''图形界面'''：LuCI → Docker（dockerman），可管理镜像、容器、网络、卷。&lt;br /&gt;
* '''命令行'''（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 'Server Version|Root Dir'&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; 指定为 '''/opt'''，位于系统 overlay 分区（约 3.7 GB）。&lt;br /&gt;
* 跑多个容器建议把大数据挂到 '''NVMe/SD''' 上：优先用 &amp;lt;code&amp;gt;-v /mnt/nvme/...:/data&amp;lt;/code&amp;gt; 挂卷，而不是搬移 data-root。&lt;br /&gt;
* '''不要随意改 data-root'''：改了之后已有镜像会&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='0'&amp;lt;/code&amp;gt;（默认）：以 &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; 启动——Docker '''不改动 IPv4 防火墙'''，规则完全由 fw4 掌管，端口发布经用户态代理转发。最干净、推荐。&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode='1'&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='0'&amp;lt;/code&amp;gt;（IPv4 不接管），'''Docker 27 起 ip6tables 是独立开关且默认开启'''：启动时会创建 &amp;lt;code&amp;gt;ip6 filter FORWARD&amp;lt;/code&amp;gt; 链并置 '''policy drop''' —— 结果是'''路由器不再转发任何 IPv6'''，内网设备拿到公网 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;
'''正确修复'''：在出厂 daemon.json 基础上'''追加'''一行 &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;'EOF'&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;
'''三个不要'''：&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; 冲突，'''Docker 会在下次开机拒绝启动'''（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;，'''真正拉起 dockerd'''。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 '''基本无效'''。排障时别被它误导。&lt;br /&gt;
&lt;br /&gt;
== English ==&lt;br /&gt;
&lt;br /&gt;
=== Entry points ===&lt;br /&gt;
* '''GUI''': LuCI → Docker (dockerman) — images, containers, networks, volumes.&lt;br /&gt;
* '''CLI''' (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 '''/opt''' on the system overlay (~3.7 GB).&lt;br /&gt;
* For heavy use, keep bulky data on '''NVMe/SD''' 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;
* '''Don't casually change data-root''' — 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='0'&amp;lt;/code&amp;gt; (default): started with &amp;lt;code&amp;gt;--iptables=false&amp;lt;/code&amp;gt; — Docker '''never touches the IPv4 firewall'''; fw4 owns all rules and published ports go through the userland proxy. Cleanest, recommended.&lt;br /&gt;
* &amp;lt;code&amp;gt;wan_mode='1'&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='0'&amp;lt;/code&amp;gt;, '''ip6tables is a separate switch, enabled by default since Docker 27''': at startup it creates an &amp;lt;code&amp;gt;ip6 filter FORWARD&amp;lt;/code&amp;gt; chain with '''policy drop''' — the router '''stops forwarding all IPv6'''. LAN clients hold global IPv6 addresses but can't reach the internet, and fw4's accepts don'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're hit.&lt;br /&gt;
&lt;br /&gt;
'''Correct fix''': '''append''' &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;
'''Three don'ts''':&lt;br /&gt;
# Don'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'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 '''dockerd refuses to start at next boot''' (it hard-errors when the same directive is both a flag and in the config file);&lt;br /&gt;
# Don'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 '''actually launches dockerd'''. 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 '''effectively inert''' on this firmware. Don'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>Guangyingmao</name></author>
	</entry>
</feed>