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

GitLab CI自定义镜像使用报错:docker not found问题求助

问题描述

我先构建了一个基准镜像(Stage A),然后在后续阶段(Stage B)尝试使用该镜像。镜像已成功构建,但后续阶段执行时出现错误:

docker not found error

附上我的配置文件:

.gitlab-ci.yml

stages:
    - build-base
    - build-addons 


build:
    stage: build-base
    image: docker:20.10.3
    # tags:
    # #    - docker
    services: 
       - docker:dind
    script:
      - date=$(date '+%Y%m%d')
      - echo $date
        - echo $CI_REGISTRY_IMAGE
        - docker build --progress=plain -t $CI_REGISTRY_IMAGE:latest  -f test.Dockerfile .
        - docker push $CI_REGISTRY_IMAGE:latest

build_terraform:  
    image: $CI_REGISTRY_IMAGE:latest
    stage: build-addons
    timeout: 1 hour
    # services: 
    #    - docker:dind
    script:
        - echo $CI_REGISTRY_IMAGE
        - docker info 
        - docker build 
          --pull 
          -t $CI_REGISTRY_IMAGE:date -f addons.Dockerfile . 

Dockerfile(test.Dockerfile)

# Use the Red Hat Enterprise Linux 8 base image
FROM registry.access.redhat.com/ubi8/ubi

# Install necessary packages and dependencies
RUN yum install -y yum-utils device-mapper-persistent-data lvm2 && \
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && \
    yum install -y docker-ce docker-ce-cli containerd.io && \
    yum clean all

问题分析与解决方案

核心问题

  1. Docker服务未启动:自定义基准镜像虽然安装了Docker客户端和服务端,但GitLab CI启动容器时默认不会自动启动Docker服务,导致执行docker命令时找不到运行的daemon。
  2. 缺少Docker Daemon依赖:build_terraform阶段未启用docker:dind服务,即使容器内装了Docker,也需要连接到可用的Docker daemon才能执行命令。
  3. CI配置语法错误:build job的script部分存在缩进错误,build_terraform里的镜像标签变量未正确定义。

修复步骤

方案1:修复自定义镜像的使用配置

修改.gitlab-ci.yml的build_terraform job,启用docker:dind服务并配置环境变量,同时启动容器内的Docker服务:

build_terraform:  
    image: $CI_REGISTRY_IMAGE:latest
    stage: build-addons
    timeout: 1 hour
    services: 
       - docker:dind
    variables:
      DOCKER_HOST: tcp://docker:2375  # 连接到dind服务的Docker daemon
      DOCKER_TLS_CERTDIR: ""  # 禁用TLS简化配置(生产环境建议启用)
    script:
        - echo $CI_REGISTRY_IMAGE
        - systemctl start docker  # 启动容器内的Docker服务
        - docker info 
        - docker build 
          --pull 
          -t $CI_REGISTRY_IMAGE:$(date '+%Y%m%d') -f addons.Dockerfile . 

方案2:直接使用官方Docker镜像(更推荐)

无需自定义基准镜像,直接复用官方docker镜像配合docker:dind服务,避免维护自定义镜像的成本:

build_terraform:  
    image: docker:20.10.3
    stage: build-addons
    timeout: 1 hour
    services: 
       - docker:dind
    variables:
      DOCKER_HOST: tcp://docker:2375
      DOCKER_TLS_CERTDIR: ""
    script:
        - echo $CI_REGISTRY_IMAGE
        - docker info 
        - docker build 
          --pull 
          -t $CI_REGISTRY_IMAGE:$(date '+%Y%m%d') -f addons.Dockerfile . 

修复build job的语法错误

原build job的script部分缩进错误,修正后:

build:
    stage: build-base
    image: docker:20.10.3
    # tags:
    # #    - docker
    services: 
       - docker:dind
    script:
      - date=$(date '+%Y%m%d')
      - echo $date
      - echo $CI_REGISTRY_IMAGE
      - docker build --progress=plain -t $CI_REGISTRY_IMAGE:latest  -f test.Dockerfile .
      - docker push $CI_REGISTRY_IMAGE:latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:18