【问题标题】:Can't Access Private MySQL Docker Image From Gitlab CI无法从 Gitlab CI 访问私有 MySQL Docker 映像
【发布时间】:2019-01-05 22:19:44
【问题描述】:

我一直在尝试将私有(自定义)MySQL 映像从我的 Docker Hub 存储库提取到 gitlab-ci.yml 管道作为服务。我添加了一个 before_script 尝试使用我的用户名和密码(CI 变量)登录到 dockerhub。失败的构建日志中没有输出表明登录到 Docker Hub 是否成功,但我假设不是因为我的图像的拉取失败并显示以下消息(编辑:或者它甚至从未尝试过,因为 gitlab 试图获取在运行之前的脚本之前提供服务?):

存储库不存在或可能需要 'docker login' (executor_docker.go:168:0s)

我正在使用共享跑步者(因为我相信这是我使用 gitlab.com 的唯一选择?) 我已经看到很多关于 docker 的 gitlab ci 令牌的提及,但我没有找到解释如何促进这一点的文档。

我确定我只是忽略了某些东西/不理解或在我的搜索中遇到了适当的解决方案,如果我只是缺乏经验,我深表歉意,并提前感谢您的帮助。

我的 gitlab-ci(maven 变量是因为该项目的构建依赖于私有 maven 存储库。数据库和 redis 主机变量在运行时注入到我的应用程序中,因此它们知道指向哪个容器)

image: maven:3.5.0-jdk-8

before_script:
  - "docker login -u$DOCKER_USER -p$DOCKER_PASS" #pipeline variables

variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  DATABASE_HOST: mysql
  REDIS_HOST: redis

services:
  - name: privaterepo/private-mysql-schema
    alias: mysql
  - name: redis:latest
    alias: redis

stages:
  - build

maven-build:
  stage: build
  script: "mvn $MAVEN_CLI_OPTS package -B"
  artifacts:
    paths:
      - target/*.jar

【问题讨论】:

    标签: docker gitlab-ci dockerhub


    【解决方案1】:

    第一件事是设置 GitLab CI 以在需要时提供私有 docker 注册表的凭据。为此,您应该遵循specific section in docs,这是一个完整的答案

    1. 使用docker login获取docker注册表url、用户名和密码 或其他方式(我不得不花一些时间来找出注册表 码头中心)
    2. 在 GitLab CI 变量部分定义 DOCKER_AUTH_CONFIG 变量,它看起来像
    {
        "auths": {
            "registry.hub.docker.com": {
                "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx" // base 64 encoded username:password
            }
        }
    }
    
    1. .gitlab-ci.yml 中声明图像/服务image: registry.hub.docker.com/ruwanka/helloworld:0.1

    这应该完全满足拉图像的要求。有another section in docs 列出了跑步者允许服务列表的要求。如果它没有指定任何,那么它应该没问题,如果它不起作用,你可能需要调整它。

    最终的 yaml 如下所示

    image: registry.hub.docker.com/ruwanka/helloworld:0.1
    
    build:
      script:
       - echo "hello"
    # more steps   
    services:
      - registry.hub.docker.com/ruwanka/helloworld:0.1
    

    GitLab 作业日志的 sn-p

    【讨论】:

    • 谢谢。是的,我找到了这个文档并尝试了它。我必须按照演示从我的用户名和密码生成 Auth 密钥,并将其设置为 gitlab ci 变量。它没有用,所以我有点放弃了。我想知道我是否弄错了注册表 URL。这是一个 docker hub 私有仓库,所以通常当我从中获取图像(例如在 docker compose 中)时,我只需要“命名空间/图像名”,但我不确定我的注册表 URL 是什么?任何想法?一些说明似乎提出了找到它的方法,但它们看起来就像通用的 docker URL...提前致谢
    • 无论哪种方式,我都会投票赞成你的答案,因为你是正确的,这应该是你这样做的方式:)
    • 我认为当您使用 docker cil 时,它应该查看私有 docker hub 存储库,但在这里我们需要指定它以在运行器环境中工作,找出正确的存储库 url 对我来说是最棘手的部分另外,如果您发现它有用,请考虑接受答案。谢谢。
    • 你是说我需要一个定制的跑步者吗?
    • 抱歉造成混淆,步骤只是从文档中提取的一般指南(我已经更新了它也反映了 ci 文件)。请将.gitlab-ci.yml 设置为我提供的那个,并拥有我提供的DOCKER_AUTH_CONFIG。那么它应该工作好运。 (图像与服务没有区别,它们只是 docker 图像)
    猜你喜欢
    • 2019-10-17
    • 2022-10-13
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2021-01-23
    相关资源
    最近更新 更多