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

如何在指定基础镜像中配置Docker-in-Docker(DinD)构建CI代理镜像?

在自定义基础镜像中配置DinD并解决容器仍创建在外部的问题

一、自定义基础镜像配置DinD的核心步骤

要在公司指定的基础镜像(基于CentOS/使用microdnf)中搭建DinD环境,需完成以下配置:

1. 安装完整的Docker组件

除docker-ce外,还需安装守护进程依赖的docker-ce-cli和containerd.io,确保内部能运行完整的Docker环境:

# 安装yum-config-manager依赖
RUN microdnf -y update \
    && microdnf --setopt=tsflags=nodocs install -y yum-utils \
    && microdnf clean all \
    && rm -rf /var/cache/yum

# 添加Docker源并安装全套Docker组件
RUN yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
    && microdnf -y update \
    && microdnf --setopt=tsflags=nodocs install -y docker-ce docker-ce-cli containerd.io \
    && microdnf clean all \
    && rm -rf /var/cache/yum

# 创建Docker守护进程存储目录
RUN mkdir -p /var/lib/docker

2. 配置DinD启动逻辑

需要先启动内部的dockerd,再执行CI任务,可通过自定义启动脚本实现:

# 复制启动脚本到镜像内
COPY start-dind.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/start-dind.sh

ENTRYPOINT ["/usr/local/bin/start-dind.sh"]

start-dind.sh脚本内容:

#!/bin/bash
# 启动内部Docker守护进程
dockerd &
# 等待守护进程初始化完成
sleep 5
# 执行后续CI任务
exec "$@"

3. 运行DinD容器的必要参数

启动容器时必须开启特权模式,并挂载tmpfs优化性能,否则内部Docker守护进程无法正常运行:

docker run -d --privileged --tmpfs /var/lib/docker your-custom-dind-image:latest

二、容器仍创建在外部的原因及解决办法

你执行docker build和docker run后容器仍在外部创建,核心原因是当前环境的DOCKER_HOST变量指向了宿主机的Docker守护进程,导致命令被转发到外部。解决方式如下:

1. 强制指定连接内部Docker守护进程

在CI脚本开头添加环境变量设置,确保所有Docker命令指向内部的DinD:

export DOCKER_HOST=unix:///var/run/docker.sock

2. 确认内部Docker守护进程已正常启动

执行Docker命令前,先检查内部守护状态:

docker info

如果返回错误,说明dockerd未启动成功,可延长启动脚本中的等待时间(如将sleep 5改为sleep 10),或直接查看dockerd输出排查问题:

dockerd --debug  # 直接启动并查看调试日志

3. 避免宿主机Docker环境变量泄露

若CI环境继承了宿主机的DOCKER_HOST、DOCKER_CERT_PATH等变量,会覆盖内部配置。启动DinD容器时可直接清空或重置这些变量:

docker run -d --privileged --tmpfs /var/lib/docker -e DOCKER_HOST=unix:///var/run/docker.sock your-custom-dind-image:latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:23:05