为 GitLab Runner 拉取镜像之前的 Docker 登录

时间:2021-01-29 22:29:19

标签: docker gitlab gitlab-ci-runner

我已经设置了一个 docker runner,我想在其中运行存储在本地存储库中的图像。我的 /etc/gitlab-runner/config.toml 是

RouteConfig

当我提交作业时,它在运行器上启动,但无法拉取图像:

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800


[[runners]]
  name = "Docker runner"
  url = "https://gitlab.str.corp/"
  token = "*secret*"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "gitlab.example.com:4443/docker:19.03.1-dind"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/certs/client", "/cache"]
    shm_size = 0

Running with gitlab-runner 13.4.0 (4e1f20da) on Docker runner abcde123 Preparing the "docker" executor Using Docker executor with image gitlab.example.com:4443/docker:19.03.8-git ... Starting service gitlab.example.com/docker:19.03.1-dind ... Authenticating with credentials from /root/.docker/config.json Pulling docker image gitlab.example.com:4443/docker:19.03.1-dind ... ERROR: Job failed: Error response from daemon: pull access denied for gitlab.example.com:4443/docker, repository does not exist or may require 'docker login': denied: requested access to the resource is denied (docker.go:142:0s) 是问题所在。如果我尝试从命令行执行 docker login,我会收到同样的错误。一个 docker 登录然后让我拉图像。

我很确定我只需要在拉取图像之前执行 docker pull <image>,但我不知道如何使其运行。

docker 镜像存储在 gitlab 集成仓库中。 This page 似乎应该自动设置身份验证,但显然并非如此。

我需要做什么才能拉取私有存储的映像。

1 个答案:

答案 0 :(得分:3)

由于跑步者在任何 before_scriptscriptafter_script 部分运行之前拉取图像,因此您将无法执行 docker login...这行得通。您需要提供 Docker Auth 配置文件,以便运行程序可以登录。

custom docker registries 的文档包含所有信息,但简而言之,您可以从 ~/.docker/config.json 获取配置。如果它不使用凭证存储(如 MacOS 的钥匙串),您可以直接复制内容并将其作为变量存储在您的 .gitlab-ci.yml 文件或名为 DOCKER_AUTH_CONFIG 的项目 CI 变量中。如果该变量存在,运行程序将自动使用它登录到注册表,然后拉取镜像。

如果您的 docker 安装使用上述文档中的凭证存储,还有其他选项可用于提供变量以及要遵循的说明。

相关问题