You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose依赖容器未重启问题排查与解决咨询

问题
  • Docker同时启动gluetun和linuxserver-deluge两个容器
  • gluetun容器需要15-20秒才能建立VPN连接
  • 期间deluge启动后因无法连接网络直接退出,错误码为128或137
  • gluetun正常运行,但deluge处于停止状态,没有自动重启
  • 尝试添加depends_on选项但无效果
  • 运行环境:Synology DSM 7.1,通过Portainer管理

现有Docker Compose配置

初始配置

version: "3"
services:
  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun_vpn
    cap_add:
      - NET_ADMIN
    environment:
      - VPN_SERVICE_PROVIDER=some provider
      - ... other variables
    ports: #uncomment ports below for additional applications
      - ... port mapping 
    volumes:
      - /volume1/docker/gluetun:/gluetun
    network_mode: bridge
    restart: unless-stopped

  linuxserver-deluge:
    image: ghcr.io/linuxserver/deluge
    container_name: deluge_gluetun
    network_mode: service:gluetun # run on the vpn network
    environment:
      - ... env variables
    volumes:
      - ... folder mapping
    restart: always  

添加depends_on后的配置

version: "3"
services:
  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun_vpn
    cap_add:
      - NET_ADMIN
    environment:
      - VPN_SERVICE_PROVIDER=some provider
      - ... other variables
    ports: #uncomment ports below for additional applications
      - ... port mapping 
    volumes:
      - /volume1/docker/gluetun:/gluetun
    network_mode: bridge
    restart: unless-stopped

  linuxserver-deluge:
    image: ghcr.io/linuxserver/deluge
    container_name: deluge_gluetun
    network_mode: service:gluetun # run on the vpn network
    environment:
      - ... env variables
    volumes:
      - /volume1/docker/deluge:/config
      - /volume1/Downloads:/data/torrents
    depends_on:
      - gluetun
    restart: always

解决方案

为什么Docker不重启deluge容器?

  • restart: always默认会在容器退出时重启,但如果容器频繁快速失败(几秒内就退出),Docker会触发退避延迟机制,暂时停止重启以避免资源耗尽
  • 错误码128/137表示容器被强制终止,这里是因为deluge启动时gluetun还没建立网络,进程无法初始化就退出,这种快速失败触发了Docker的重启冷却

具体解决办法

1. 利用gluetun健康检查+依赖条件(推荐)

Gluetun支持健康检查来检测VPN连接状态,结合Compose 3.9+的depends_on条件参数,让deluge等gluetun完全就绪后再启动:

修改后的配置示例:

version: "3.9"
services:
  gluetun:
    image: qmcgaw/gluetun
    container_name: gluetun_vpn
    cap_add:
      - NET_ADMIN
    environment:
      - VPN_SERVICE_PROVIDER=some provider
      - ... other variables
    ports:
      - ... port mapping 
    volumes:
      - /volume1/docker/gluetun:/gluetun
    network_mode: bridge
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "https://ipinfo.io/ip"]
      interval: 10s
      timeout: 5s
      retries: 5

  linuxserver-deluge:
    image: ghcr.io/linuxserver/deluge
    container_name: deluge_gluetun
    network_mode: service:gluetun
    environment:
      - ... env variables
    volumes:
      - /volume1/docker/deluge:/config
      - /volume1/Downloads:/data/torrents
    depends_on:
      gluetun:
        condition: service_healthy
    restart: always

2. 给deluge添加启动延迟脚本

如果无法升级Compose版本,可在deluge启动命令中加入固定延迟,确保gluetun有足够时间建立连接:

linuxserver-deluge:
  # 其他配置保持不变
  command: /bin/sh -c "sleep 30 && /init"
  restart: always

注:sleep 30可根据实际连接时间调整,建议设为比gluetun最长连接时间多5-10秒

3. 关闭Docker重启冷却(不推荐)

通过修改Docker配置强制无冷却重启,但可能造成资源浪费,仅作临时应急:

  • 编辑Docker配置文件(通常是/etc/docker/daemon.json),添加:
{
  "restart-max-attempts": -1,
  "restart-windows": 0
}
  • 重启Docker服务:systemctl restart docker

关键说明

  • 默认的depends_on只保证容器启动顺序,不等待服务就绪,所以之前的配置无效
  • 用gluetun健康检查是最可靠的方案,能精准判断VPN网络是否可用
  • 启动延迟脚本是简单 workaround,但如果gluetun连接时间不稳定可能失效

内容的提问来源于stack exchange,提问作者Alexander M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:38:19