docker login in custom gitlab-runner: No such host (http://docker:2375/v1.39/auth: dial tcp: lookup docker on 172.31.0.2:53: no such host)

ank*_*ngh 12 gitlab docker gitlab-ci-runner

我在 gitlab.com 上有一个私人仓库。我已经使用 gitlab 共享运行程序设置了 CI/CD 管道。在代码推送上,构建了一个 docker 镜像,登录到 gitlab 私有 docker 注册表并推送镜像。它适用于共享的跑步者。现在我正在尝试为管道创建自定义运行器。

我在 DigitalOcean 上创建了一个 Droplet(Ubuntu 18.04 上的 Docker 18.09.2~3 - 8 GB / 4 CPU / 160 GB SSD)

ssh 进入液滴

创建一个跑步者(来自https://docs.gitlab.com/runner/install/docker.html#docker-image-installation-and-configuration

docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest
Run Code Online (Sandbox Code Playgroud)

并注册它(来自https://docs.gitlab.com/runner/register/index.html#one-line-registration-command

docker run --rm -t -i -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
  --non-interactive \
  --executor "docker" \
  --docker-image alpine:3 \
  --url "https://gitlab.com/" \
  --registration-token "MY_TOKEN" \
  --description "docker-runner" \
  --tag-list "docker,digitalocean" \
  --run-untagged="true" \
  --locked="false"
Run Code Online (Sandbox Code Playgroud)

在运行管道时,此命令失败

docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
Run Code Online (Sandbox Code Playgroud)

如果我使用

docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com 
Run Code Online (Sandbox Code Playgroud)

带有此错误消息

error during connect: Post http://docker:2375/v1.39/auth: dial tcp: lookup docker on 67.207.67.2:53: no such host
Run Code Online (Sandbox Code Playgroud)

如果我使用本地 PC,我也会遇到同样的错误。

我尝试编辑 /etc/hosts 没有成功。

它仍然适用于共享跑步者,但我的自定义跑步者失败了。我错过了什么?

码头工人信息

Containers: 4
Running: 1
Paused: 0
 Stopped: 3
Images: 4
Server Version: 18.09.2
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9754871865f7fe2f4e74d43e2fc7ccd237edcbce
runc version: 09c8266bf2fcf9519a651b04ae54c967b9ab86ec
init version: fec3683
Security Options:
 apparmor
 seccomp
  Profile: default
Kernel Version: 4.15.0-45-generic
Operating System: Ubuntu 18.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.79GiB
Name: docker-s-4vcpu-8gb-sgp1-01
ID: XF6Y:25TY:YXNO:RDHT:PEGU:KGR7:GPEM:DDBE:MAQ5:5VIJ:4GHB:Q7TF
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
Run Code Online (Sandbox Code Playgroud)

这是成功处理管道的共享运行器上的 /etc/hosts 文件

127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1   0hshit.hopto.org
127.0.0.1   daymndaymn.myftp.org
127.0.0.1   loba.webhop.me
172.17.0.3  docker 50d9e6c88489 runner-72989761-project-11958054-concurrent-0-docker-0
172.17.0.4  runner-72989761-project-11958054-concurrent-0 
Run Code Online (Sandbox Code Playgroud)

pri*_*ngi 15

GitLab 13.3 中,您可以在运行程序的config.toml文件中执行以下操作:

[[runners]]部分添加:

  pre_build_script = "export DOCKER_HOST=tcp://docker:2375"
  environment = ["DOCKER_DRIVER=overlay2", "DOCKER_TLS_CERTDIR="]
Run Code Online (Sandbox Code Playgroud)

并在[runners.docker]

添加:

tls_cert_path = ""
Run Code Online (Sandbox Code Playgroud)

并更改privilegedtrue.

最后你会得到这样的东西:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "some_name"
  url = "https://my.url.com"
  token = "a_token"
  executor = "docker"
  pre_build_script = "export DOCKER_HOST=tcp://docker:2375"
  environment = ["DOCKER_DRIVER=overlay2", "DOCKER_TLS_CERTDIR="]
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_cert_path = ""
    tls_verify = false
    image = "ruby:2.6"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
Run Code Online (Sandbox Code Playgroud)

.gitlab-ci.yml 中

您只需对用户 docker 执行此操作:

services:
  - docker:dind
Run Code Online (Sandbox Code Playgroud)

  • 使用 GitLab.com 14.0,在我的情况下应用此解决方案会产生相同的错误:`dial tcp: lookup docker on 8.8.8.8:53: no such host`。试过`docker:19.03.12-dind`和`docker:20.10.7-dind` (2认同)

小智 3

我有类似的问题。显然,dind 服务不适用于 12.1 版本的 gitlab runner。可以在这里找到临时解决方法: https://forum.gitlab.com/t/docker-dind-stops-working-after-12-1-0-update/28664/4

(临时)解决方案是将以下代码段(来自链接)添加到正确的位置:

services:
    - name: docker:dind
      entrypoint: ["env", "-u", "DOCKER_HOST"]
      command: ["dockerd-entrypoint.sh"]
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
    # See https://github.com/docker-library/docker/pull/166
    DOCKER_TLS_CERTDIR: ""
Run Code Online (Sandbox Code Playgroud)