docker - 无法在 gitlab CI 中构建 docker 镜像

标签 docker gitlab gitlab-ci

一直在尝试构建一个简单的 gitlab CI 管道,该管道构建图像并将其推送到 Google 容器存储库。我遇到了这个错误 -

ERROR: error during connect: Get "http://docker:2375/v1.24/info": dial tcp: lookup docker on 169.254.169.254:53: no such host

我已经尝试了 gitlab 问题线程中发布的所有解决方案,但没有帮助。我正在使用公共(public)运行者,这是一个非常简单的 ci 脚本。

image: docker:latest

variables:
  GCR_IMAGE: <GCR_IMAGE>

services:
  - docker:dind

build:
  stage: build
  before_script:
    - docker info
    - echo $GOOGLE_CLOUD_ACCOUNT | docker login -u _json_key --password-stdin https://us.gcr.io
  script:
    - docker build -t $GCR_IMAGE:latest .
    - docker push $GCR_IMAGE:$CI_COMMIT_SHA

相关问题线程:https://gitlab.com/gitlab-org/gitlab-runner/-/issues/4794

使用gitlab-runner 15.7.1

最佳答案

几周前我遇到了这个问题,并通过以下方法解决了它:

  image: 
    name: docker:20.10.16
  services:
    - name: docker:20.10.16-dind
  variables:
    DOCKER_HOST: tcp://docker:2376/
    DOCKER_TLS_CERTDIR: "/certs"
    DOCKER_TLS_VERIFY: 1
    DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"
  before_script:
    - until docker info; do sleep 1; done
    - echo $GOOGLE_CLOUD_ACCOUNT | docker login -u _json_key --password-stdin https://us.gcr.io
  script:
    - docker build -t $GCR_IMAGE:latest .
    - docker push $GCR_IMAGE:$CI_COMMIT_SHA

同时将此配置添加到运行器

    [[runners]]
      [runners.kubernetes]
        namespace = "{{.Release.Namespace}}"
        image = "ubuntu:20.04"
      [[runners.kubernetes.volumes.empty_dir]]
        name = "docker-certs"
        mount_path = "/certs/client"
        medium = "Memory"

关于docker - 无法在 gitlab CI 中构建 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74958598/

相关文章:

shell - 在 Gitlab CI/CD 管道脚本中使用 shell 变量?

gitlab - GitLab HTTP 远程上的 git 命令失败并显示 403

GitLab CI 为什么这个运行者不做构建?

Azure Durable Function HttpStart 失败 : Webhooks are not configured

docker - 带有初始数据的 Neo4j 容器 (docker)

docker - 使用ecs-cli时为什么会得到404?

gitlab - 如何在gitlab中创建项目访问 token ?

linux - 使用变量替换创建文件并替换字符串中的某些字符

docker - 使用 docker 运行程序和缓存时,Gitlab CICD 本地实例存储空间不足

python - LEADER_NOT_AVAILABLE - docker 容器