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
相关产品推荐
相关产品推荐

