查看“︁Photonicat 2 Docker 使用指南”︁的源代码
←
Photonicat 2 Docker 使用指南
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{| class="wikitable" |- ! 适用 / 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)'''。本页覆盖日常使用、存储位置、防火墙行为,以及一个'''影响全网 IPv6 的重要坑'''及其正确修复方式。1 代用户请参考 [[Photonicat Openwrt Docker/istore]]。 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]]. == 中文说明 == === 使用入口 === * '''图形界面''':LuCI → Docker(dockerman),可管理镜像、容器、网络、卷。 * '''命令行'''(SSH):<code>docker</code> 与 <code>docker compose</code> 均可直接使用: <pre> docker info | grep -E 'Server Version|Root Dir' docker run -d --name uptime-kuma -p 3001:3001 louislam/uptime-kuma docker compose up -d # 在含 docker-compose.yml 的目录下 </pre> === 存储位置 === * 镜像/容器数据目录(data-root)由出厂的 <code>/etc/docker/daemon.json</code> 指定为 '''/opt''',位于系统 overlay 分区(约 3.7 GB)。 * 跑多个容器建议把大数据挂到 '''NVMe/SD''' 上:优先用 <code>-v /mnt/nvme/...:/data</code> 挂卷,而不是搬移 data-root。 * '''不要随意改 data-root''':改了之后已有镜像会"消失"(其实还在旧目录占着空间)。 === 防火墙行为(wan_mode) === Docker 由 <code>/etc/init.d/docker</code> 启动,行为由 UCI 选项控制: <pre> uci show docker # docker.@docker[0].wan_mode </pre> * <code>wan_mode='0'</code>(默认):以 <code>--iptables=false</code> 启动——Docker '''不改动 IPv4 防火墙''',规则完全由 fw4 掌管,端口发布经用户态代理转发。最干净、推荐。 * <code>wan_mode='1'</code>:允许 Docker 自行管理 iptables(容器间隔离、DNAT 端口映射由 Docker 负责)。需要复杂容器网络时才用。 === ⚠ 重要坑:Docker 27 默认接管 IPv6 防火墙 === 即使 <code>wan_mode='0'</code>(IPv4 不接管),'''Docker 27 起 ip6tables 是独立开关且默认开启''':启动时会创建 <code>ip6 filter FORWARD</code> 链并置 '''policy drop''' —— 结果是'''路由器不再转发任何 IPv6''',内网设备拿到公网 IPv6 地址却上不了网(fw4 放行也无效,因为两条链是"与"关系)。 检查是否中招: <pre> nft list chain ip6 filter FORWARD # 看到 "policy drop" 且计数增长 = 中招 </pre> '''正确修复''':在出厂 daemon.json 基础上'''追加'''一行 <code>"ip6tables": false</code>: <pre> cat > /etc/docker/daemon.json <<'EOF' { "data-root": "/opt/", "log-level": "warn", "ip6tables": false } EOF /etc/init.d/docker restart </pre> '''三个不要''': # 不要删除/改动出厂的 <code>data-root</code>(镜像会"消失",见上); # 不要往 daemon.json 添加 <code>"iptables"</code> 键——它与启动参数 <code>--iptables=false</code> 冲突,'''Docker 会在下次开机拒绝启动'''(dockerd 对"同一项既是命令行参数又在配置文件"直接报错退出); # 不要用 <code>ip6tables -P FORWARD ACCEPT</code> 之类的手工命令当永久方案——重启后 Docker 会重建 drop 链。 === 两个启动脚本的说明 === 系统里同时存在两个 Docker 启动脚本,实际生效的是前者: * <code>/etc/init.d/docker</code>(S25,luci-app-docker 提供):开机先启动,读取 UCI <code>docker.wan_mode</code>,'''真正拉起 dockerd'''。dockerd 会自动读取默认配置文件 <code>/etc/docker/daemon.json</code>——这就是上面修复生效的原因。 * <code>/etc/init.d/dockerd</code>(S99,OpenWrt 标准包):开机时 dockerd 已在运行,它的实例不会生效;其 UCI 配置(/etc/config/dockerd)对实际运行的 Docker '''基本无效'''。排障时别被它误导。 == English == === Entry points === * '''GUI''': LuCI → Docker (dockerman) — images, containers, networks, volumes. * '''CLI''' (SSH): both <code>docker</code> and <code>docker compose</code> work out of the box (see examples above). === Storage === * The data-root is set by the factory <code>/etc/docker/daemon.json</code> to '''/opt''' on the system overlay (~3.7 GB). * For heavy use, keep bulky data on '''NVMe/SD''' via bind mounts (<code>-v /mnt/nvme/...:/data</code>) rather than moving the data-root. * '''Don't casually change data-root''' — existing images "disappear" (while still consuming space in the old location). === Firewall behavior (wan_mode) === Docker is launched by <code>/etc/init.d/docker</code>, controlled by UCI: * <code>wan_mode='0'</code> (default): started with <code>--iptables=false</code> — Docker '''never touches the IPv4 firewall'''; fw4 owns all rules and published ports go through the userland proxy. Cleanest, recommended. * <code>wan_mode='1'</code>: Docker manages iptables itself (container isolation, DNAT port mapping). Only for complex container networking. === ⚠ The big pitfall: Docker 27 hijacks the IPv6 firewall by default === Even with <code>wan_mode='0'</code>, '''ip6tables is a separate switch, enabled by default since Docker 27''': at startup it creates an <code>ip6 filter FORWARD</code> 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). Check: <code>nft list chain ip6 filter FORWARD</code> — "policy drop" with a growing counter means you're hit. '''Correct fix''': '''append''' <code>"ip6tables": false</code> to the factory daemon.json (full file above), then <code>/etc/init.d/docker restart</code>. '''Three don'ts''': # Don't remove/alter the factory <code>data-root</code> (images "disappear", see above); # Don't add an <code>"iptables"</code> key — it conflicts with the launch flag <code>--iptables=false</code> and '''dockerd refuses to start at next boot''' (it hard-errors when the same directive is both a flag and in the config file); # Don't rely on manual <code>ip6tables -P FORWARD ACCEPT</code> — Docker recreates the drop chain after a reboot. === About the two init scripts === Two Docker init scripts coexist; the first one wins: * <code>/etc/init.d/docker</code> (S25, from luci-app-docker): starts first at boot, reads UCI <code>docker.wan_mode</code>, and '''actually launches dockerd'''. dockerd reads the default config file <code>/etc/docker/daemon.json</code> — which is why the fix above works. * <code>/etc/init.d/dockerd</code> (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. [[Photoincat 2 IPv6 PPPoE]] | [[Photonicat Openwrt Docker/istore]] | [[Photonicat 2 管理界面新功能 (2026)]]
返回
Photonicat 2 Docker 使用指南
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息