快速修复
# 一键:按项目 docker/README.md 参数启动(8080 映射 + named volume + 指定用户)
docker run -d --name ccr -p 8080:8080 -v ccr-data:/data -u 1000:1000 <镜像名>
以项目 docker/README.md 的实际镜像名/数据目录为准;这行解决"打不开 + 丢配置 + 权限"三个问题。
你会遇到什么
你用 Docker 把网关跑起来了,容器显示在运行,但浏览器就是打不开;或者容器重建一次,配置全部消失;再或者启动时报 volume 权限错误。Docker 部署的三个常见坑一次踩全:端口映射不对、数据没持久化、容器用户和目录属主不匹配。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
- 网关镜像里 Nginx 监听 8080,而 3456/3457/3459 是容器内部端口,只在容器内网互相访问,不需要映射到宿主机。只映射内部端口,宿主机上自然没有入口 → 浏览器打不开。
- 不挂 named volume 时,配置写在容器可写层,容器一删就丢 → "重启后配置丢失"。
- 镜像建议以
-u 1000:1000运行;容器用户和挂载目录属主不一致时,容器内没权限读写 → 权限报错。
| 现象 | 根因 |
|---|---|
| 浏览器打不开 | 只映射了内部端口,或没映射 8080 |
| 重启后配置丢失 | 没挂 named volume |
| volume 权限报错 | 容器用户与宿主机目录属主不匹配 |
Docker 是隔离运行时,三个坑对应三层隔离:网络隔离——容器有自己的网络命名空间,容器内监听的端口默认只在容器内可见;-p 宿主端口:容器端口 是“打洞”动作,只映射了内部端口(3456/3457/3459)就相当于洞打在没人走的墙上,宿主机自然没有入口。
存储隔离——容器可写层随容器生灭,数据放里面 = 一次性;named volume 是“把宿主机的一块存储挂进容器”,容器重建后重新挂上,数据还在。
用户隔离——容器内进程以镜像指定的用户运行(如 1000:1000),挂载目录的属主是宿主机的;两边 ID 对不上,容器内就没权限读写。三个坑共享同一个方法论:理解“容器内 ≠ 宿主机”,一切以“穿透边界”的方式显式打通——端口要显式映射、数据要显式挂载、权限要显式对齐。
一步步来
1. 查端口占用 — 必做
docker ps
看 8080 是否已被占用;占用就换宿主端口 -p 8081:8080(容器内仍是 8080)。
2. 用正确参数启动 — 必做
按项目 docker/README.md:只映射宿主需要的端口(通常 -p 8080:8080),用 named volume 保存数据,并加 -u 1000:1000:
docker run -d --name ccr -p 8080:8080 -v ccr-data:/data -u 1000:1000 <镜像名>
3. 浏览器验证 — 必做
open http://localhost:8080
能打开管理界面即端口 OK(Windows 用手动打开浏览器)。
4. 数据恢复 — 必做
如果之前没挂 volume 导致配置丢失:把旧数据目录挂到对应数据目录后重启:
docker run -d --name ccr -p 8080:8080 -v /path/to/old-data:/data -u 1000:1000 <镜像名>
怎么确认修好了
容器启动后一条命令看状态与映射(预期输出形态):
docker ps --filter name=ccr
→ STATUS Up / PORTS 0.0.0.0:8080->8080/tcp
浏览器打开 http://localhost:8080 能出管理界面;重启容器后配置仍在(不丢)。
其它环境的表现
| 环境 | 说明 |
|---|---|
| 端口冲突 | docker ps 查占用,宿主侧换端口即可,容器内端口不用动 |
| 数据持久化 | 必须 named volume;裸目录挂载注意属主 |
| 权限报错 | 镜像文档建议 -u 1000:1000;也可换属主或改挂载目录 |
| Windows Docker Desktop | 命令相同,浏览器手动访问 |
| 未实测项 | 本市场未实测 Docker 形态(本地容器环境限制),以上按项目文档与网页案例整理 |
症状
容器能起但浏览器打不开;重启后配置丢失;或 volume 权限报错。
原因
- 只暴露 Nginx 8080:3456/3457/3459 是容器内部端口,不需要映射到宿主机。
- 未用 named volume:数据随容器重建丢失。
- 容器用户与 volume 属主不匹配(镜像文档建议
-u 1000:1000)。
解法
- 按项目 docker/README.md 的参数启动:
-p 8080:8080+ named volume +-u 1000:1000。 - 端口冲突先
docker ps查占用,换宿主端口(-p 8081:8080)即可。 - 数据恢复:volume 挂载到对应数据目录后重启。
验证证据
- 项目 docker/README.md;网页案例:CSDN(Docker 端口冲突/权限场景)。
- 本市场未实测 Docker 形态(本地容器环境限制),如实标注。
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
claude-code-router来源与证据
← 网关与路由 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡