无法 运行 GCloud SDK 的 DIND docker GitLab Runner 中的图像
Cannot run DIND for GCloud SDK docker image in GitLab Runner
我已经设置了一个简单的 .gitlab-ci
文件,它应该能够 运行 docker 服务:
docker:
image: google/cloud-sdk:latest
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://127.0.0.1:2375
services:
- docker:dind
tags:
- docker
script:
- docker pull buster-slim
然而它失败了:
https://gitlab.com/knyttl/runnerdemo/-/jobs/932204050
2020-12-25T19:31:04.558361767Z time="2020-12-25T19:31:04.558195638Z" level=info msg="API listen on [::]:2375"
2020-12-25T19:31:04.558522591Z time="2020-12-25T19:31:04.558447616Z" level=info msg="API listen on /var/run/docker.sock"
该服务显然可以正确启动,但随后无法正常工作:
Cannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?
问题是因为 docker 守护程序不是您为此作业指定的映像 google/cloud-sdk/
的一部分。您应该使用 google/cloud-sdk 作为基础图像来创建自己的图像。您还可以在作业的 before_script
部分中安装并启动 docker。请参阅 doc on DockerHub 了解您使用的图像:
正在安装附加组件
默认情况下,所有 gcloud 组件都安装在默认映像上(google/cloud-sdk:latest 和 google/cloud-sdk:VERSION)。
google/cloud-sdk:slim 和 google/cloud-sdk:alpine 图像不包含预安装的其他组件。
您可以按照以下说明扩展这些图像:
基于 Debian 的映像
cd debian_slim/
docker build --build-arg CLOUD_SDK_VERSION=159.0.0
--build-arg INSTALL_COMPONENTS="google-cloud-sdk-datastore-emulator" \
-t my-cloud-sdk-docker:slim .`
可以使用 DIND 的图像是 docker:dind
,不一定是 google/cloud-sdk:latest
,所以你的 .gitlab-ci.yml
wuold 看起来像:
docker:
image: docker:dind
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
tags:
- docker
script:
- docker pull buster-slim
# ...
# I don't know what needs to be built...
您可以查看此 tutorial 一步一步的食谱。
事实上,这不起作用的唯一原因是:
DOCKER_HOST: tcp://docker:2375
dind
服务可以在 cloud-sdk
图像中 运行,但它需要链接为 host
。
我已经设置了一个简单的 .gitlab-ci
文件,它应该能够 运行 docker 服务:
docker:
image: google/cloud-sdk:latest
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: tcp://127.0.0.1:2375
services:
- docker:dind
tags:
- docker
script:
- docker pull buster-slim
然而它失败了:
https://gitlab.com/knyttl/runnerdemo/-/jobs/932204050
2020-12-25T19:31:04.558361767Z time="2020-12-25T19:31:04.558195638Z" level=info msg="API listen on [::]:2375"
2020-12-25T19:31:04.558522591Z time="2020-12-25T19:31:04.558447616Z" level=info msg="API listen on /var/run/docker.sock"
该服务显然可以正确启动,但随后无法正常工作:
Cannot connect to the Docker daemon at tcp://127.0.0.1:2375. Is the docker daemon running?
问题是因为 docker 守护程序不是您为此作业指定的映像 google/cloud-sdk/
的一部分。您应该使用 google/cloud-sdk 作为基础图像来创建自己的图像。您还可以在作业的 before_script
部分中安装并启动 docker。请参阅 doc on DockerHub 了解您使用的图像:
正在安装附加组件
默认情况下,所有 gcloud 组件都安装在默认映像上(google/cloud-sdk:latest 和 google/cloud-sdk:VERSION)。 google/cloud-sdk:slim 和 google/cloud-sdk:alpine 图像不包含预安装的其他组件。
您可以按照以下说明扩展这些图像: 基于 Debian 的映像
cd debian_slim/
docker build --build-arg CLOUD_SDK_VERSION=159.0.0
--build-arg INSTALL_COMPONENTS="google-cloud-sdk-datastore-emulator" \
-t my-cloud-sdk-docker:slim .`
可以使用 DIND 的图像是 docker:dind
,不一定是 google/cloud-sdk:latest
,所以你的 .gitlab-ci.yml
wuold 看起来像:
docker:
image: docker:dind
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
tags:
- docker
script:
- docker pull buster-slim
# ...
# I don't know what needs to be built...
您可以查看此 tutorial 一步一步的食谱。
事实上,这不起作用的唯一原因是:
DOCKER_HOST: tcp://docker:2375
dind
服务可以在 cloud-sdk
图像中 运行,但它需要链接为 host
。