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

EC2部署Docker执行器GitLab Runner报Docker daemon未运行错误如何解决?

GitLab Runner Docker执行器DinD连接失败排查方案

1. 优先排查环境变量覆盖问题

  • 检查GitLab项目/所在组的「设置」->「CI/CD」->「变量」页面,是否配置了全局的DOCKER_HOST变量,值为tcp://localhost:2375,此处配置的变量优先级高于.gitlab-ci.yml中定义的变量,会直接覆盖你在CI文件里的修改
  • 检查Runner的config.toml配置,[[runners]]段下是否有environment配置项强制指定了DOCKER_HOST,如果有需要删除或修改为正确值
  • 可在CI任务的before_script最开头添加env | grep DOCKER命令,打印实际生效的所有Docker相关环境变量,确认DOCKER_HOST的值是否符合预期

2. 验证DinD服务端口与变量匹配

Docker-in-Docker服务默认端口规则:

  • 开启TLS时(DOCKER_TLS_CERTDIR不为空),监听2376端口
  • 关闭TLS时,监听2375端口

可临时用以下简化配置测试,排除TLS配置错误问题:

image: docker:19.03.12
variables:
  DOCKER_TLS_CERTDIR: ""
  DOCKER_HOST: "tcp://docker:2375"
services:
  - name: docker:19.03.12-dind
    alias: docker
before_script:
  - env | grep DOCKER
  - ping docker -c 3 # 验证DinD服务网络连通性
  - docker info

3. 排查Docker执行器挂载配置问题

  • 如果你使用挂载宿主机Docker套接字的方案,不需要启用DinD服务,需要在config.toml的[runners.docker]段的volumes配置中添加"/var/run/docker.sock:/var/run/docker.sock",同时删除CI配置中的services、DOCKER_TLS_CERTDIR相关配置
  • 如果你使用DinD方案,确认volumes配置的/certs/client目录在宿主机上没有权限限制,可尝试修改为"/certs"确保证书目录完整共享

4. 验证EC2实例网络配置

  • 检查EC2实例的Docker网桥配置,默认情况下同一网桥下的容器可以互通,可在CI任务中执行ping docker确认能解析并连通DinD服务容器
  • 检查EC2实例的iptables规则、安全组配置,没有禁止容器网段的内部通信

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:04