docker - Gitlab-runner,docker:20.10.2-dind 显示错误,无法在 tcp://docker:2375 连接到 Docker 守护进程
问题描述
在 helm 安装的 GCP 上的自托管 Gitlab 上,我使用 Gitlab-runner。
在 gitlab-runner 我需要使用 docker 所以使用 dind,但我得到了错误
tcp://docker:2375。docker 守护进程是否正在运行?
gitlab-runner 部署
...
spec:
containers:
- command:
- /bin/bash
- /scripts/entrypoint
env:
- name: CI_SERVER_URL
value: https://my-gitlab.com
- name: CLONE_URL
- name: RUNNER_REQUEST_CONCURRENCY
value: "1"
- name: RUNNER_EXECUTOR
value: kubernetes
- name: REGISTER_LOCKED
value: "false"
- name: RUNNER_TAG_LIST
- name: KUBERNETES_IMAGE
- name: KUBERNETES_PRIVILEGED
value: "true" # <= set privileged true to use dind
...
gitlab-ci.yaml
services:
- docker:20.10.4-dind
stages:
- build
variables:
GIT_SSL_NO_VERIFY: "1"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ''
DOCKER_HOST: tcp://docker:2375
image:
name: google/cloud-sdk:latest
before_script:
- docker version
build:
stage: build
script:
- echo hello
gitlab-runner 日志
Executing "step_script" stage of the job script
00:00
$ docker version
Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:09:53 2020
OS/Arch: linux/amd64
Experimental: false
Cleaning up file based variables
00:00
ERROR: Job failed: command terminated with exit code 1
故障排除说这是因为 TLS。于是我设置 DOCKER_TLS_CERTDIR: ''
,方式写在另一个文件中。
另外,我使用docker:19.03.0-dind
. 从 19.03.0-dind 开始,TLS 是自动的。所以禁用 TLS 配置必须正确工作。(docker:19.3.13-dind 也很好用。)
我不知道为什么 docker:20 会出现这个错误。有没有人已经尝试过 gitlab-runner 比 docker:20 更好?
解决方案
通俗易懂
runners:
config: |
[[runners]]
[runners.kubernetes]
image = "ubuntu:20.04"
privileged = true
[[runners.kubernetes.volumes.empty_dir]]
name = "docker-certs"
mount_path = "/certs/client"
medium = "Memory"
gitlab-ci.yaml
services:
- docker:20.10.4-dind
stages:
- build
variables:
GIT_SSL_NO_VERIFY: "1"
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
DOCKER_HOST: tcp://docker:2376
DOCKER_TLS_VERIFY: 1
image:
name: google/cloud-sdk:latest
before_script:
- docker version
build:
stage: build
script:
- echo hello
推荐阅读
- python-3.x - 找到结果后如何告诉python继续评估
- regex - 如何将变量插入到正则表达式 .match() 断言中?
- android - 安装和启动应用程序时会启动不同的 Activity,为什么?
- c - 如何将 dma_alloc_attr() 与 DMA_ATTR_NO_KERNEL_MAPPING 一起使用?
- python - 哎呀帮助!缺少要求:自我
- mysql - 通过 MYSQL 存储过程处理多行
- php - PHP - 内置函数,用另一个数组中的特定元素填充数组
- javascript - 在反应中为 Web 应用程序生成站点地图的问题
- python - 我可以在 tkraise() 函数中传递哪些参数?
- xcode - 如何将事实配对以创建新事实?