测试 NAS 容器服务恢复时的 Docker Compose 排查记录

简介: 节后恢复NAS测试环境,Jellyfin、PhotoPrism、Home Assistant容器页面异常。本文记录分层排查过程:从磁盘空间、镜像拉取、Compose状态,到挂载路径、端口连通性及Nginx反向代理配置,精准定位三处问题并修复。(239字)

节后恢复一台测试 NAS,上面跑了几个容器服务:Jellyfin 做媒体预览,PhotoPrism 做照片索引,Home Assistant 做设备状态面板。5 月 7 日上午恢复时,docker compose up -d 没报错,但几个服务的页面状态不一致。

这篇记录排查顺序,重点是 Docker Compose、挂载卷、端口和反向代理。

环境目标

NAS / Linux
Docker Engine
Docker Compose
Jellyfin: 8096
PhotoPrism: 2342
Home Assistant: 8123
Nginx: 80/443

基础检查:

df -h
docker version
docker compose version
docker compose ps

镜像预检

compose 里同时使用 Docker Hub 和 GHCR 镜像。为了避免整组拉取卡住,先把核心镜像拆开。

docker pull docker.1ms.run/jellyfin/jellyfin:latest
docker pull docker.1ms.run/photoprism/photoprism:latest
docker pull ghcr.1ms.run/home-assistant/home-assistant:stable
docker pull docker.1ms.run/nginx:stable-alpine

确认镜像层没问题后,继续执行:

docker compose pull
docker compose up -d
docker compose ps

Compose 配置片段

services:
  jellyfin:
    image: docker.1ms.run/jellyfin/jellyfin:latest
    ports:
      - "8096:8096"
    volumes:
      - /data/docker/jellyfin/config:/config
      - /data/media:/media:ro
    restart: unless-stopped

  photoprism:
    image: docker.1ms.run/photoprism/photoprism:latest
    ports:
      - "2342:2342"
    volumes:
      - /data/photos:/photoprism/originals
      - /data/docker/photoprism/storage:/photoprism/storage
    restart: unless-stopped

  homeassistant:
    image: ghcr.1ms.run/home-assistant/home-assistant:stable
    network_mode: host
    privileged: true
    volumes:
      - /data/docker/homeassistant:/config
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped

这里把媒体、照片、配置目录分开。Jellyfin 的媒体目录只读挂载,PhotoPrism 的 originals 和 storage 分开,Home Assistant 使用 host 网络。

排查挂载卷

页面异常时,先看容器拿到的挂载,而不是只看 compose 文件。

docker inspect jellyfin --format '{
   {json .Mounts}}'
docker inspect photoprism --format '{
   {json .Mounts}}'
docker inspect homeassistant --format '{
   {json .Mounts}}'

再看宿主机路径:

ls -lah /data/media
ls -lah /data/photos
ls -lah /data/docker

这次 Jellyfin 媒体库为空,是因为 /data/media 下面实际只有一个迁移后的空目录,真实媒体目录被挪到了 /data/video。修正挂载后重新启动 Jellyfin,媒体库恢复扫描。

排查端口和反代

先看端口:

ss -lntp
curl -I http://127.0.0.1:8096
curl -I http://127.0.0.1:2342
curl -I http://127.0.0.1:8123

内网端口通以后,再看 Nginx:

docker logs --tail=120 nginx

一个 502 是 upstream 写了旧容器名。改完 upstream 后,只重载 Nginx,不需要重启所有业务容器。

复盘

这次恢复里真正的问题有三个:

问题 表现 处理
镜像源不稳定 docker compose pull 先拆镜像预检
挂载路径变更 Jellyfin 媒体库为空 修正 bind mount
反代上游过期 域名访问 502 更新 Nginx upstream

最终保留下来的顺序:

磁盘 -> 镜像 -> compose -> mount -> 权限 -> 端口 -> 反代 -> 应用日志

NAS 或测试机上跑容器服务时,不要把所有异常都归到 Docker。Docker 负责进程和镜像,数据还在宿主机目录,入口还在网络和反代。分层排查能少走很多弯路。

相关文章
|
8天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23426 8
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
17天前
|
缓存 人工智能 自然语言处理
我对比了8个Claude API中转站,踩了不少坑,总结给你
本文是个人开发者耗时1周实测的8大Claude中转平台横向评测,聚焦Claude Code真实体验:以加权均价(¥/M token)、内部汇率、缓存支持、模型真实性及稳定性为核心指标。
6400 25
|
12天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
4134 13
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
13天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
4956 13
|
29天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
23186 65
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)