Gitlab管道Docker构建阶段

3
我正在尝试将Docker构建阶段引入我的GitLab流水线中。理想情况下,我应该能够首先构建镜像,然后针对容器运行后续阶段。但是,当我在下面的gitlab-ci.yaml中使用构建步骤时,有时会出现以下错误:

error during connect: Get http://docker:2375/v1.37/info: dial tcp: lookup docker on 10.51.240.10:53: no such host ERROR: Job failed: error executing remote command: command terminated with non-zero exit code: Error executing in Docker Container: 1

在它不能工作的情况下,我只能猜测Docker守护程序还没有准备好连接。有人有什么想法如何解决这个问题吗? gitlab-ci.yaml:
stages:
  - build

build:
  image: docker:18
  services:
    - docker:18-dind
  variables:
    DOCKER_DRIVER: overlay
    DOCKER_HOST: tcp://docker:2375/
  before_script:
    - docker info
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
    - docker pull ${CI_REGISTRY_IMAGE}:latest || echo Could not fetch ${CI_REGISTRY_IMAGE}:latest from registry
    - docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} || echo Could not fetch ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} from registry
    - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} --cache-from ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} .
    - docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
    - if [[ ${CI_COMMIT_REF_SLUG} == "master" ]] ; then docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} ${CI_REGISTRY_IMAGE}:latest ; fi
    - if [[ ${CI_COMMIT_REF_SLUG} == "master" ]] ; then docker push ${CI_REGISTRY_IMAGE}:latest ; fi
  stage: build

更新:我正在使用kubernetes执行器。


端口53是DNS。看起来它无法解析“docker”主机名。 - marcolz
4个回答

1

您是否使用gitlab-runner来运行作业?如果是,您是否设置了--executor docker并注册了runner?

您是否将/var/run/docker.sock作为卷传递给runner?

我在GitLab CI中构建Docker镜像时没有遇到任何问题。我没有传递任何DOCKER_DRIVERDOCKER_HOST变量。


感谢Izdorr。我忘记提到我们使用的是Kubernetes执行器,而不是使用共享的Runner(我已更新问题)。根据https://docs.gitlab.com/ee/ci/docker/using_docker_build.html上提到的第二个配置,我没有传递卷。 - Silian Rails

1
我们看到几乎所有相同条件下出现了完全相同的错误(我们使用localhost而不是docker作为DOCKER_HOST,使用overlay2而不是plain overlay)。主要在Docker执行器上看到这种情况;目前我们只是认为执行器不稳定,因为我们重试任务后成功了。我们已经检查过,之前没有争用Runner,所以我们找不到任何解释。

0
最终,我们在Kubernetes上自托管了一个Runner,该Runner使用Helm Chart部署,并在特权模式下启动。
我们还切换到了overlay2。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接