无法通过tcp:// localhost:2375 /连接到Docker守护程序。 Docker守护程序是否正在运行。在GitLab上 [英] Cannot connect to the Docker daemon at tcp://localhost:2375/. Is the docker daemon running. On GitLab
问题描述
我正在尝试在GitLab中构建CI管道。我想问一下在GitLab CI中使用docker的情况。
I'm trying to build the CI pipeline in GitLab. I'd like to ask about the docker for work in GitLab CI.
此问题: https://gitlab.com/gitlab-org/gitlab-runner/issues/4501#note_195033385
我都遵循两种方法的说明。使用TLS而未使用TLS。
但是它仍然卡住了。发生相同错误
I'm follow the instruction for both ways. With TLS and not used TLS. But It's still stuck. Which in same error
无法通过tcp:// localhost:2375 /连接到Docker守护程序。 docker守护进程是否正在运行
我已尝试解决此问题。
I've try to troubleshooting this problem. follow by below,
1)启用TLS
使用过.gitlab- ci.yml和config.toml用于在Runner中启用TLS。
Which used .gitlab-ci.yml and config.toml for enable TLS in Runner.
这是我的 .gitlab-ci.yml
image: docker:19.03
variables:
DOCKER_HOST: tcp://localhost:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
IMAGE_NAME: image_name
services:
- docker:19.03-dind
stages:
- build
publish:
stage: build
script:
- docker build -t$IMAGE_NAME:$(echo $CI_COMMIT_SHA | cut -c1-10) .
- docker push $IMAGE_NAME:$(echo $CI_COMMIT_SHA | cut -c1-10)
only:
- master
这是我的 config.toml
[[runners]]
name = MY_RUNNER
url = MY_HOST
token = MY_TOKEN_RUNNER
executor = "docker"
[runners.custom_build_dir]
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/certs/client", "/cache"]
shm_size = 0
2)禁用TLS
.gitlab-ci.yml
image: docker:18.09
variables:
DOCKER_HOST: tcp://localhost:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
IMAGE_NAME: image_name
services:
- docker:18.09-dind
stages:
- build
publish:
stage: build
script:
- docker build -t$IMAGE_NAME:$(echo $CI_COMMIT_SHA | cut -c1-10) .
- docker push $IMAGE_NAME:$(echo $CI_COMMIT_SHA | cut -c1-10)
only:
- master
这是我的 config.toml
[[runners]]
environment = ["DOCKER_TLS_CERTDIR="]
有人知道吗?
推荐答案
您要将 DOCKER_HOST
设置为 tcp:// docker:2375
。这是一项服务,即默认运行在单独的容器中,默认名称是映像名称,而不是本地主机。
You want to set DOCKER_HOST
to tcp://docker:2375
. It's a "service", i.e. running in a separate container, by default named after the image name, rather than localhost.
这里是一个 .gitlab -ci.yml
应该起作用的代码段:
Here's a .gitlab-ci.yml
snippet that should work:
# Build and push the Docker image off of merges to master; based off
# of Gitlab CI support in https://pythonspeed.com/products/pythoncontainer/
docker-build:
stage: build
image:
# An alpine-based image with the `docker` CLI installed.
name: docker:stable
# This will run a Docker daemon in a container (Docker-In-Docker), which will
# be available at thedockerhost:2375. If you make e.g. port 5000 public in Docker
# (`docker run -p 5000:5000 yourimage`) it will be exposed at thedockerhost:5000.
services:
- name: docker:dind
alias: thedockerhost
variables:
# Tell docker CLI how to talk to Docker daemon; see
# https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker-executor
DOCKER_HOST: tcp://thedockerhost:2375/
# Use the overlayfs driver for improved performance:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
script:
# Download bash:
- apk add --no-cache bash python3
# GitLab has a built-in Docker image registry, whose parameters are set automatically.
# See https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#using-the-gitlab-contai
#
# CHANGEME: You can use some other Docker registry though by changing the
# login and image name.
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- docker build -t "$CI_REGISTRY_IMAGE" .
- docker push "$CI_REGISTRY_IMAGE"
# Only build off of master branch:
only:
- master
这篇关于无法通过tcp:// localhost:2375 /连接到Docker守护程序。 Docker守护程序是否正在运行。在GitLab上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!