使用 gitlab-ci.yml 的 Docker 内部的 Docker

Posted

技术标签:

【中文标题】使用 gitlab-ci.yml 的 Docker 内部的 Docker【英文标题】:Docker inside docker with gitlab-ci.yml 【发布时间】:2018-11-29 11:39:13 【问题描述】:

我已经创建了一个 gitlab 运行器。

我选择了 docker executor 和一个 ubuntu 默认镜像。

我把它放在我的 .gitlab-ci.yml 文件的顶部:

image: microsoft/dotnet:latest

我在想如果 .gitlab-ci.yml 文件中没有“images”指令,gitlab-ci 会默认加载 ubuntu 图像。

但是,有一点奇怪:我现在想知道 gitlab-ci 是不是创建了一个 ubuntu 容器,然后在 ubuntu 容器中创建了一个 dotnet 容器。

这是我在 gitlab 服务器上完成的一个非常丑陋的测试:我删除了 /usr/bin/docker 文件,并用一个记录参数的脚本替换了它。

这很奇怪,因为作业仍在工作,而我的日志文件中没有任何内容....

谢谢

【问题讨论】:

【参考方案1】:

如果您没有指定映像,但确实使用了 Ubuntu 映像,并且您的作业应该在 dotnet 容器上运行,而无需启动 ubuntu。

您的测试的行为方式与它的行为方式相同,因为 docker 是客户端,而 dockerd 是 gitlab runner 实际调用的守护进程。

如果您想检查发生了什么,您应该致电docker ps 来获取正在运行的容器列表。

【讨论】:

以上是关于使用 gitlab-ci.yml 的 Docker 内部的 Docker的主要内容,如果未能解决你的问题,请参考以下文章

在 .gitlab-ci.yml 中运行 docker-compose build

如何将存储库中的文件复制到用于作业的 Docker 容器中,在 gitlab-ci.yml

使用“:”的脚本命令导致 .gitlab-ci.yml 执行错误

如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中

使用 gitlab-ci 构建多个 Docker 镜像

.gitlab-ci.yml 配置文件详解