如何在GitLab CI中从私有Artifactory拉取基础镜像并解决未授权报错
问题1:镜像路径写法是否正确
- 你的写法存在潜在错误,标准Artifactory Docker镜像拉取路径格式为
{仓库域名}/{镜像名}:{标签},你当前路径中包含/artifactory/路由前缀,需要先本地验证路径有效性:
本地执行docker pull artifactory.bayer.com/artifactory/aie-docker-dev-mydockerrepo:latest,如果能正常拉取说明路径符合你的Artifactory代理配置,否则需要调整路径,常见的正确路径格式有两种:- 端口模式:
artifactory.bayer.com:${Docker仓库端口}/{镜像名}:{标签} - 子域名模式:
${仓库名}.artifactory.bayer.com/{镜像名}:{标签}
- 端口模式:
问题2:基础镜像拉取的登录配置位置
GitLab Runner拉取CI基础镜像的操作发生在job初始化阶段,早于before_script的执行时机,你写在before_script中的docker login仅作用于job运行时的镜像操作,不会对基础镜像拉取生效,可按以下两种方式配置:
方式1:配置DOCKER_AUTH_CONFIG项目变量(优先推荐)
你当前的CI配置中已经声明了该变量,只需正确赋值即可:
- 本地执行
docker login artifactory.bayer.com,输入Artifactory用户名和Access Token完成登录 - 打开本地Docker配置文件
~/.docker/config.json,复制全部文件内容 - 进入GitLab项目的「设置→CI/CD→变量」页面,新增名为
DOCKER_AUTH_CONFIG的变量,值为刚才复制的config.json内容,根据你的分支规则调整是否开启「受保护」「掩码」选项即可
配置完成后Runner会自动读取该凭证拉取私有基础镜像。
方式2:直接在GitLab Runner配置中添加凭证
如果你有权限操作Runner所在服务器,可直接修改Runner的config.toml配置文件,在对应Runner的[[runners]]段落添加配置:
[runners.docker] [[runners.docker.auth_config]] address = "artifactory.bayer.com" username = "${Artifactory用户名}" password = "${Artifactory Access Token}"
修改完成后重启Runner即可生效,该方式不需要每个项目单独配置凭证。
内容的提问来源于stack exchange,提问作者Laster
相关产品推荐
相关产品推荐

