docker - 针对 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 命令运行良好。不知道我在这里做错了什么。
解决方案
尝试在脚本部分明确启动 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
推荐阅读
- loops - 虽然循环不会一直通过
- java - 我做了一个循环来验证两个敌人正在碰撞,但它不起作用
- python - Scrapy 的 JSON 输出形成一个 JSON 对象数组
- wildfly - 通过远程 WildFly 21 服务器上的 jconsole 打开 JMX
- r - dplyr:如何按列 B 的条件对分组的列 A 求和,并在没有 NA 的情况下变异为列 sum_A
- javascript - 更改 Location 标头时 NodeJs 不重定向
- python - 为什么我的 alpha-beta 搜索的结果取决于访问节点的顺序?
- docker - 使 docker 容器只能从某个 IP 访问
- javascript - 令牌过期时如何使用 react-router-dom 重定向用户?
- sql - 查找产品的最大数量