【问题标题】:Gitlab pipeline docker build stageGitlab管道docker构建阶段
【发布时间】:2018-09-26 01:44:50
【问题描述】:

我正在尝试在我的 gitlab 管道中实现一个 docker build 阶段。理想情况下,我可以先构建映像,然后针对容器运行后续阶段。但是,当我在下面的 gitlab-ci.yaml 中使用构建步骤时,有时会出现错误:

连接期间出错:获取http://docker:2375/v1.37/info:拨打tcp:在10.51.240.10:53 上查找docker:没有这样的主机 错误:作业失败:执行远程命令时出错:命令以非零退出代码终止:在 Docker 容器中执行时出错: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 主机名。

标签: docker gitlab gitlab-ci gitlab-ci-runner


【解决方案1】:

https://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-in-docker-executor 他们说 kubernetes 应该有 tcp://localhost:2375 作为 DOCKER_HOST:

   # Note that if you're using Kubernetes executor, the variable should be set to
   # tcp://localhost:2375 because of how Kubernetes executor connects services
   # to the job container
   DOCKER_HOST: tcp://docker:2375/

【讨论】:

    【解决方案2】:

    最后,我们在 Kubernetes 上自行托管了一个运行器,该运行器与 helm chart 一起部署,并将其设置为特权模式。

    我们也切换到了overlay2

    【讨论】:

      【解决方案3】:

      我们已经在几乎所有相同的条件下看到了这个完全相同的错误(我们为 DOCKER_HOST 指定 localhost 而不是 docker,我们使用 overlay2 而不是 plain 覆盖)。我们主要在 Docker 执行器上看到它;现在我们只是把它归结为执行者是不稳定的,因为我们重试了这个工作并且它成功了。我们查了一下,之前没有对跑步者的争执,所以我们找不到任何解释。

      【讨论】:

        【解决方案4】:

        您是否使用 gitlab-runner 来运行作业?如果是这样,您是否设置--executor docker 注册您的跑步者?

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

        我在 GitLab CI 中构建的 docker 图像没有任何问题。我没有传递任何 DOCKER_DRIVERDOCKER_HOST 变量。

        【讨论】:

        猜你喜欢
        • 2021-10-05
        • 2021-10-29
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 2018-09-15
        • 2020-07-13
        相关资源
        最近更新 更多