我已经设置了一个 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 似乎应该自动设置身份验证,但显然并非如此。
我需要做什么才能拉取私有存储的映像。
答案 0 :(得分:3)
由于跑步者在任何 before_script
、script
或 after_script
部分运行之前拉取图像,因此您将无法执行 docker login...
这行得通。您需要提供 Docker Auth 配置文件,以便运行程序可以登录。
custom docker registries 的文档包含所有信息,但简而言之,您可以从 ~/.docker/config.json
获取配置。如果它不使用凭证存储(如 MacOS 的钥匙串),您可以直接复制内容并将其作为变量存储在您的 .gitlab-ci.yml
文件或名为 DOCKER_AUTH_CONFIG
的项目 CI 变量中。如果该变量存在,运行程序将自动使用它登录到注册表,然后拉取镜像。
如果您的 docker 安装使用上述文档中的凭证存储,还有其他选项可用于提供变量以及要遵循的说明。