无法连接到 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屋!