如何配置Docker Compose:有GPU则启用,无GPU时正常启动容器
实现Docker Compose容器「有GPU则启用,无GPU直接启动」的配置方案
你当前的Docker Compose配置强制要求GPU资源,因此在无GPU的机器上启动会报错:
Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
要实现自适应启动,可采用以下两种方案:
方案1:利用环境变量+YAML条件配置(单配置文件)
修改docker-compose.yaml,通过环境变量控制是否加载GPU资源配置:
version: "3.9" # 定义GPU资源配置锚点 x-gpu-resources: &gpu-resources deploy: resources: reservations: devices: - capabilities: [gpu] services: app: image: nvidia/cuda:11.0.3-base-ubuntu20.04 # 仅当USE_GPU环境变量为true时,加载GPU配置 ${USE_GPU:+<<: *gpu-resources}
启动时,自动检测GPU并设置环境变量:
# 检测是否存在GPU,设置USE_GPU变量 export USE_GPU=$(nvidia-smi &> /dev/null && echo true || echo false) # 启动容器 docker-compose up -d
方案2:使用Docker Compose Profiles(更清晰的多环境分离)
通过Profiles区分GPU和非GPU环境,启动时自动选择对应Profile:
修改docker-compose.yaml:
version: "3.9" services: # 基础无GPU配置 app: image: nvidia/cuda:11.0.3-base-ubuntu20.04 profiles: ["no-gpu"] # GPU增强配置,继承基础配置并添加GPU资源 app-gpu: extends: app profiles: ["gpu"] deploy: resources: reservations: devices: - capabilities: [gpu]
启动时执行以下命令:
if nvidia-smi &> /dev/null; then docker-compose --profile gpu up -d else docker-compose --profile no-gpu up -d fi
注意事项
- 两种方案都依赖
nvidia-smi命令检测GPU,需确保有GPU的机器已安装NVIDIA驱动及Docker NVIDIA runtime。 - 方案1的YAML条件配置仅支持Docker Compose 1.28及以上版本。
内容的提问来源于stack exchange,提问作者Nos
相关产品推荐
相关产品推荐

