GitLab CI Docker镜像中执行docker-compose无法连接守护进程报错求助
报错原因
- 新版
docker:dind服务默认启用TLS加密,仅开放2376端口提供加密Docker API服务,非加密的2375端口默认关闭。通过pip安装的docker-compose V1版本默认尝试连接docker:2375,且无法自动适配GitLab CI注入的TLS相关环境变量,导致无法连接到Docker守护进程。 - Docker-in-Docker服务启动存在延迟,未完全初始化完成就执行docker-compose命令也会触发连接失败错误。
解决方案
方案一:关闭dind TLS校验,适配docker-compose V1默认逻辑
修改.gitlab-ci.yml配置,强制dind关闭TLS、开放2375端口,同时添加等待dind启动完成的逻辑,配置如下:
image: docker services: - name: docker:dind command: ["--tls=false"] variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" build: script: # 等待Docker daemon完全启动 - until docker info; do sleep 1; done - apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make - pip3 install --upgrade pip - pip install docker-compose - docker-compose up -d
方案二:使用预安装docker-compose的官方镜像(推荐)
不用手动安装编译依赖,大幅缩短执行时间,同时默认适配TLS配置,配置如下:
image: docker/compose:latest services: - docker:dind variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" build: script: - until docker info; do sleep 1; done - docker-compose up -d
内容的提问来源于stack exchange,提问作者Dilyar Iskan
相关产品推荐
相关产品推荐

