如何在GitLab CI/CD中同时启用Docker-in-Docker与NVIDIA工具链
解决方案:在GitLab CI/CD中同时使用Docker命令与NVIDIA工具
核心问题分析
你遇到的Cannot connect to the Docker daemon错误,是因为你的nvidia/cuda镜像仅安装了Docker CLI,但没有连接到运行中的Docker daemon。要同时使用NVIDIA工具和Docker命令,需要将dind服务(提供Docker daemon)与NVIDIA-enabled的Runner/镜像结合起来。
方案一:使用预构建的组合镜像
直接使用同时包含NVIDIA CUDA工具和Docker CLI的镜像,或者自行构建:
自定义镜像Dockerfile示例
FROM nvidia/cuda:12.1.0-base-ubuntu20.04 # 安装Docker CLI RUN apt-get update && apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" && \ apt-get update && apt-get install -y --no-install-recommends docker-ce-cli && \ rm -rf /var/lib/apt/lists/*
构建后推送到你的镜像仓库,即可在CI配置中直接使用该镜像。
方案二:直接组合现有场景(无需自定义镜像)
利用你已有的Runner配置(runtime = "nvidia"),在CI配置中引入dind服务并安装Docker CLI:
.gitlab-ci.yml 配置示例
services: - docker:20.10.17-dind image: nvidia/cuda:12.1.0-base-ubuntu20.04 variables: DOCKER_HOST: tcp://docker:2375 # 指向dind服务的Docker daemon DOCKER_TLS_CERTDIR: "" # 禁用TLS(内部CI环境可安全使用) before_script: # 安装Docker CLI到nvidia镜像 - apt-get update && apt-get install -y --no-install-recommends docker-ce-cli build_with_nvidia_and_docker: script: - nvidia-smi # 验证NVIDIA工具正常 - docker info # 验证Docker CLI连接成功 # 执行你的镜像构建命令
关键说明
services中的docker:dind提供了独立的Docker daemon,供你的job容器中的Docker CLI调用。DOCKER_HOST变量告诉Docker CLI连接到dind服务的daemon,而非本地的unix socket。- 你的Runner已配置
runtime = "nvidia",确保job容器能访问NVIDIA设备。
内容的提问来源于stack exchange,提问作者Kevin Vasko
相关产品推荐
相关产品推荐

