GitLab CI使用本地Docker镜像设置pull_policy后拉取失败如何解决?
问题根因
- 全局配置段的
pull_policy不生效:该参数为Docker执行器的专属配置,必须放在对应Runner实例的[[runners]]→[runners.docker]配置块下才会被读取 - 现有拉取策略顺序错误:
["always", "if-not-present"]会优先强制从远端镜像仓库拉取镜像,拉取失败才会尝试使用本地镜像,自然会触发Docker Hub的拉取权限报错
修复步骤
- 编辑
/etc/gitlab-runner/config.toml配置文件,调整配置结构:
首先删除全局段的pull_policy = ["always", "if-not-present"]配置,找到你正在使用的Docker类型Runner对应的[[runners]]块,在其下的[runners.docker]配置中添加/修改拉取策略:concurrent = 10 check_interval = 0 [[runners]] name = "你的Docker Runner名称" url = "你的GitLab地址" token = "你的Runner令牌" executor = "docker" [runners.docker] # 调整拉取策略顺序,优先使用本地镜像,本地不存在才去远端拉取 pull_policy = ["if-not-present", "always"] # 其余原有[runners.docker]下的配置保持不变 image = "默认镜像" privileged = false # ...其他原有配置 - 保存配置后重启GitLab Runner服务生效:
gitlab-runner restart - 验证本地镜像存在:执行
docker images确认vnijs/rsm-mgta453镜像确实存储在GitLab Runner所在服务器的本地Docker镜像列表中,镜像名称和标签和CI配置中使用的完全一致。
可选进阶配置
如果只允许使用本地镜像、禁止所有远端拉取操作,可以直接将pull_policy设置为["never"],此时Runner会完全跳过镜像拉取步骤,直接使用本地镜像,不存在就直接报错。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

