Ubuntu系统下Docker Compose容器注销后停止响应求助
问题描述
Ubuntu系统中通过docker compose up -d启动多个配置restart: always的容器(原配置为unless-stopped,修改后问题仍存在)。注销系统数小时后,容器无法响应请求,仅Deluge前端提示无法连接deluged,其余容器日志无异常,Docker外的服务运行正常。
附docker-compose.yml配置:
services: radarr: container_name: radarr restart: always ports: - 7878:7878 volumes: - ~/docker/servarr/radarr/config:/config - ~/media:/media - ~/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York image: linuxserver/radarr sonarr: container_name: sonarr ports: - 8989:8989 volumes: - ~/docker/servarr/sonarr/config:/config - ~/media:/media - ~/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=America/New_York image: linuxserver/sonarr restart: always deluge: image: lscr.io/linuxserver/deluge:latest container_name: deluge environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - DELUGE_LOGLEVEL=error volumes: - ~/docker/servarr/deluge/config:/config - ~/downloads:/downloads ports: - 8112:8112 - 6881:6881 - 6881:6881/udp - 58846:58846 restart: always flaresolverr: image: ghcr.io/flaresolverr/flaresolverr:latest container_name: flaresolverr environment: - LOG_LEVEL=${LOG_LEVEL:-info} - LOG_HTML=${LOG_HTML:-false} - CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none} - TZ=Europe/London ports: - 8191:8191 volumes: - ~/docker/flaresolverr/config:/config restart: always prowlarr: container_name: prowlarr image: cr.hotio.dev/hotio/prowlarr ports: - 9696:9696 environment: - PUID=1000 - PGID=1000 - UMASK=002 - TZ=Etc/UTC volumes: - ~/docker/prowlarr/config:/config restart: always mylar3: image: lscr.io/linuxserver/mylar3:latest container_name: mylar3 environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC volumes: - ~/docker/mylar/config:/config - ~/media:/media #optional - ~/downloads:/downloads ports: - 8090:8090 restart: always sabnzbd: image: lscr.io/linuxserver/sabnzbd:latest container_name: sabnzbd environment: - PUID=1000 - PGID=1000 - TZ=Etc/UTC volumes: - ~/docker/servarr/sabnzb:/config - ~/downloads:/downloads ports: - 8080:8080 restart: always
排查与解决步骤
1. 确认容器运行状态
- 执行
docker ps查看容器是否处于Up状态,排查是否存在假死或退出情况 - 针对Deluge,执行
docker top deluge查看容器内deluged进程是否存在;对其他容器也可执行同样命令确认进程状态 - 尝试手动重启单个容器:
docker restart deluge,验证是否能恢复响应,判断是单容器问题还是全局问题
2. 排查系统资源与电源管理
- 检查内存不足导致的进程被杀:执行
dmesg | grep -i oom,查看是否有OOM Killer日志(内存耗尽时系统会自动终止进程) - 禁用Ubuntu自动休眠/挂起功能(服务器版建议默认关闭),避免注销后系统进入低功耗状态切断容器资源
3. 检查Docker守护进程状态
- 执行
systemctl status docker确认Docker服务是否正常运行;若服务异常,设置开机自启并重启:systemctl enable --now docker - 查看Docker守护进程日志:
journalctl -u docker.service -f,排查注销后是否有异常报错
4. 验证挂载卷权限与配置
- 检查挂载目录权限:执行
ls -ld ~/downloads ~/media,确保目录所属UID/GID为1000(与容器内PUID/PGID一致),权限异常会导致容器进程无法读写挂起 - 检查Deluge配置目录:查看
~/docker/servarr/deluge/config/deluged.pid文件中的PID是否与容器内进程一致,若进程异常退出但容器未检测到,会导致假死
5. 网络连通性排查
- 执行
docker network inspect bridge查看容器网络配置是否正常 - 在容器内测试网络:
docker exec deluge ping 8.8.8.8,确认容器网络连通性 - 检查端口占用:
ss -tulpn | grep 8112,确保Deluge端口未被其他进程抢占
6. 增强容器健康检测
给Deluge添加健康检查,让Docker自动检测容器状态并重启,修改docker-compose.yml中Deluge配置:
deluge: # 保留原有配置 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8112"] interval: 30s timeout: 10s retries: 3 start_period: 60s
其他容器也可参考添加类似健康检查,确保Docker能及时发现异常并重启
内容的提问来源于stack exchange,提问作者devilsansclue
相关产品推荐
相关产品推荐

