seafile 在飞牛下 docker 部署重启设备后 seahub 异常无法启动的解决方案

问题描述

seafile13 在飞牛下 docker 部署正常运行,但在重启设备后日志报错 seahub 启动异常

问题抽象

程序环境:AMD64 架构 + 飞牛 OS + Docker + DockerCompose + seafile13 (seafileltd/seafile-mc:13.0-latest + notification-server:13.0-latest + 移除其他模块) + MySQL8 (独立部署,8.4.7) + Redis (独立部署,最新版)

这类问题我使用了多种方法(wait-for-it 脚本等待 redis、mysql)避免其他错误的发生,但依旧百分百出现,并且只有 docker-compose 清除重置才能解决,由此必定是 seafile 遗留什么文件导致无法直接重启容器恢复,总需要手动重置不是我想要的解决方案,经研究发现是因为设备重启后 seafile 容器中 /opt/seafile/pids/seahub.pid 文件的残留导致无法正常重启容器来恢复服务。

解决方案

开机命令清除容器中的 pid 文件

通过在 /etc/systemd/system 目录下增加一个 docker-clean-pid-and-restart.service 开机脚本来清除容器中的 pid 文件并重启容器来实现自动恢复

复制代码
sudo vim /etc/systemd/system/docker-clean-pid-and-restart.service

其中我的容器名称为 seafile,映射出来的端口号是 9605 可以用于容器是否启动过得判断,毕竟只有启动了才能进去删除指定文件,具体开机脚本如下:

bash 复制代码
[Unit]
# 服务描述,可自定义
Description=Docker Clean PID File and Restart Container
# 确保 Docker 服务先启动,避免容器操作失败
After=docker.service network.target
Requires=docker.service

[Service]
# 一次性任务类型,等待所有命令执行完成
Type=oneshot
# 执行完成后仍标记服务为激活状态,便于查看状态
RemainAfterExit=yes
# 核心命令:先删除 PID 文件 → 再重启容器(根据情况替换 容器名seafile  端口号9605)
ExecStart=/bin/bash -c 'CONTAINER_NAME="seafile"; HOST_PORT="9605"; until nc -z localhost "$HOST_PORT"; do echo "Waiting for $CONTAINER_NAME (host port $HOST_PORT) to be available..."; sleep 1; done; docker exec $CONTAINER_NAME rm -f /opt/seafile/pids/seahub.pid && docker restart $CONTAINER_NAME'
# 可选:执行失败后重试(避免偶发网络/ Docker 就绪问题)
Restart=on-failure
RestartSec=5s
# 超时时间,避免命令卡死
TimeoutStartSec=60s

[Install]
# 开机启动关联多用户模式
WantedBy=multi-user.target

重启 daemon 刷新读取开机脚本,并设置开机器自启

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable docker-clean-pid-and-restart.service
# 校验运行
sudo systemctl start docker-clean-pid-and-restart.service
# 查看运行结果,如果容器名、端口没写错很快就能刷出来
sudo systemctl status docker-clean-pid-and-restart.service

也可以在重启下飞牛试试

相关推荐
“码”力全开38 分钟前
解构企业级安防中台:基于Docker容器化与GB28181/RTSP多协议汇聚的边缘计算AI视频管理平台(全量源码交付)
人工智能·docker·边缘计算
见牛羊1 小时前
docker理解
java·docker·容器
tellmewhoisi1 小时前
Docker Compose最巧妙的设计之一——内置的服务发现机制
docker·服务发现
AI服务老曹1 小时前
解耦异构算力:基于 Docker 与 GB28181/RTSP 的边缘计算 AI 视频管理平台架构设计(支持源码交付)
人工智能·docker·边缘计算
ai产品老杨2 小时前
深度解析:基于 Docker 与边缘计算的 AI 视频管理平台架构——打通 GB28181/RTSP 协议,支持全量源码交付与异构部署
人工智能·docker·边缘计算
朝阳5813 小时前
MySQL 主从复制 — Docker 双机灾备方案
数据库·mysql·docker
ai产品老杨3 小时前
【架构实战】如何基于 Docker 与边缘计算构建企业级 AI 视频管理平台?打通 GB28181/RTSP 统一接入与异构算力调度,全量源码交付破解集成痛点
人工智能·docker·架构
IT策士3 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:第18篇 从 Docker Compose 到 Kubernetes 的思考
docker·容器·kubernetes
linmengmeng_13144 小时前
【总结】Docker 容器重建后 Nginx 502 问题排查与解决
nginx·docker·容器
Plastic garden4 小时前
Docker(3)Docker 镜像 & Dockerfile
运维·docker·容器