网关与路由 · 收录于 2026-08-29 · 适用 1 工具 ✓ 实测验证

Docker 部署:端口 / volume / 权限

已验证 2026-08-29Docker 部署打不开/丢配置/权限错——按项目 docker/README.md 参数:-p 8080:8080 + named volume + -u 1000:1000。

快速修复

# 一键:按项目 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 权限报错。

原因

  1. 只暴露 Nginx 8080:3456/3457/3459 是容器内部端口,不需要映射到宿主机。
  2. 未用 named volume:数据随容器重建丢失。
  3. 容器用户与 volume 属主不匹配(镜像文档建议 -u 1000:1000)。

解法

  1. 按项目 docker/README.md 的参数启动:-p 8080:8080 + named volume + -u 1000:1000。
  2. 端口冲突先 docker ps 查占用,换宿主端口(-p 8081:8080)即可。
  3. 数据恢复:volume 挂载到对应数据目录后重启。
验证证据
  • 项目 docker/README.md;网页案例:CSDN(Docker 端口冲突/权限场景)。
  • 本市场未实测 Docker 形态(本地容器环境限制),如实标注。

适用工具 (1)

本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。

claude-code-router

来源与证据

收录 验证 ✓ 实测验证适用 1 工具
方案含本地实测或来源可复核的解法;未实测项已在文中如实标注。

← 网关与路由 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡