首页 > 解决方案 > 针对 docker-in-docker (dind) 运行 docker-compose

问题描述

在 gitlab-ci 中,我试图在 Docker 容器中运行 docker-compose。为此,我正在使用 Docker-in-Docker。为了测试一切正常,我只需执行一个docker info命令。但是,当我使用 docker-compose 图像作为我的图像时,执行时出现以下错误docker info

ERROR: Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

如果我使用 docker 本身作为图像,则docker info命令成功。我对此感到困惑,因为 docker-compose 图像基于 docker 图像。

以下 .gitlab-ci.yml 会导致 docker info 命令出错:

image: docker/compose:debian-1.26.0

stages:
  - test

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: "/certs"

services:
 - docker:19.03.8-dind

test-provider:
  stage: test
  script:
    - docker info

如果我将图像更改为docker:19.03.8,则 docker info 命令运行良好。不知道我在这里做错了什么。

标签: dockergitlab-ci

解决方案


尝试在脚本部分明确启动 dockerd。您还可以添加脚本以等待 docker daemon 启动成功。就像是:

sudo dockerd & timeout -t 9 bash -c "while [ ! -S /var/run/docker.sock ]; do sleep 3 && ls -lah /var/run/; done" || exit 1

推荐阅读