Tro*_*els 6 gitlab docker gitlab-ci gitlab-ci-runner
我已经设置了一个 docker 运行程序,我想在其中运行存储在本地存储库上的映像。我的 /etc/gitlab-runner/config.toml 是
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
Run Code Online (Sandbox Code Playgroud)
当我提交作业时,它在运行器上启动,但无法拉取图像:
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)
Run Code Online (Sandbox Code Playgroud)
这docker login就是问题所在。docker pull <image>如果我尝试从命令行执行此操作,则会收到相同的错误。然后通过 docker 登录让我拉取镜像。
我非常确定我只需要echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY在拉取图像之前执行此操作,但我不知道如何使其运行。
docker镜像存储在gitlab集成仓库中。 该页面看起来应该自动设置身份验证,但事实显然并非如此。
我需要做什么才能提取私有存储的图像。
由于运行程序在任何before_script、script或after_script部分运行之前拉取图像,因此您将无法执行 adocker login...来使其工作。您需要提供 Docker Auth 配置文件,以便运行者可以登录。
自定义 docker 注册表的文档包含所有信息,但简而言之,您可以从~/.docker/config.json. 如果它不使用凭证存储(如 MacOS 的钥匙串),您可以直接复制内容并将其作为变量存储在您的.gitlab-ci.yml文件中,或存储在名为 的项目 CI 变量中DOCKER_AUTH_CONFIG。如果该变量存在,运行程序将自动使用它登录注册表,然后提取映像。
如果您的 docker 安装使用上述文档中的凭证存储,还有其他选项可用于提供变量以及要遵循的说明。
| 归档时间: |
|
| 查看次数: |
10235 次 |
| 最近记录: |