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

Docker Compose配置GPU设备后restart:always不生效问题求助

解决NixOS上Docker GPU容器无法自动重启的问题

修复步骤

1. 调整服务启动顺序,确保NVIDIA工具先于Docker就绪

问题核心大概率是Docker守护进程启动时,NVIDIA容器运行时还没完成初始化,导致容器重启时找不到GPU设备。在NixOS的configuration.nix里添加依赖配置:

systemd.services.docker = {
  after = [ "nvidia-container-toolkit.service" ];
  requires = [ "nvidia-container-toolkit.service" ];
};

执行sudo nixos-rebuild switch生效,重启系统后测试。

2. 优化容器重启策略,增加延迟重试

默认重启策略可能在GPU未就绪时失败后不再尝试,给容器加启动延迟:

  • 非Swarm模式的docker-compose配置:
services:
  jellyfin:
    ...
    restart: unless-stopped
    restart_delay: 10s  # 启动失败后延迟10秒重试
    ...
  • Swarm模式的deploy配置:
deploy:
  resources:
    reservations:
      devices:
        - driver: cdi
          device_ids:
            - nvidia.com/gpu=all
          capabilities: [gpu]
  restart_policy:
    condition: on-failure
    delay: 10s
    max_attempts: 5  # 最多重试5次
    window: 60s

3. 验证CDI设备的就绪时机

CDI设备文件(/var/run/cdi/nvidia.yaml)可能在系统启动初期未生成完成,导致容器启动失败:

  • 手动检查该文件是否存在,若不存在,确认nvidia-container-toolkit服务状态:systemctl status nvidia-container-toolkit
  • 给容器添加启动前等待逻辑,比如在启动命令前加until [ -f /var/run/cdi/nvidia.yaml ]; do sleep 2; done;(需容器内有bash环境)

4. 确认Docker守护进程的NVIDIA配置正确

确保Docker默认使用NVIDIA运行时,在NixOS配置中启用:

virtualisation.docker.enable = true;
virtualisation.docker.nvidia.enable = true;

执行sudo nixos-rebuild switch后,重启Docker服务:systemctl restart docker

内容的提问来源于stack exchange,提问作者Quio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:25:55