代码之家  ›  专栏  ›  技术社区  ›  Troy Daniels

在为GitLab Runner提取图像之前登录Docker

  •  0
  • Troy Daniels  · 技术社区  · 5 年前

    我已经设置了docker runner,我想在其中运行存储在本地存储库中的图像。My/etc/gitlab runner/config。汤姆是

    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
    

    当我提交作业时,它从runner开始,但无法拖动图像:

    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 pull <image> 从命令行中,我得到了相同的错误。docker登录后,我可以拉取图像。

    我很确定我只需要 echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY 在提取图像之前,但我不知道如何使其运行。

    docker映像存储在gitlab集成存储库中。 This page 似乎应该自动设置身份验证,但情况显然不是这样。

    我需要做什么才能提取私人存储的图像。

    0 回复  |  直到 5 年前
        1
  •  4
  •   Adam Marshall    5 年前

    因为跑步者在任何 before_script , script after_script 分区运行时,您将无法执行 docker login... 让它发挥作用。您需要提供Docker身份验证配置文件,以便运行人员可以登录。

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

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