GitLab CI流水线拉取MySQL镜像时出现‘missing signature key’错误求助
问题排查与修复指导:GitLab CI拉取MySQL镜像时出现"missing signature key"错误
问题概述
长期运行的GitLab CI流水线突然无法拉取mysql:8.0.34镜像,报错信息如下:
WARNING: Failed to pull image with policy "always": missing signature key (manager.go:237:1s) ERROR: Job failed: failed to pull image "mysql:8.0.34" with specified policies [always]: missing signature key (manager.go:237:1s)
可能原因及修复步骤
1. 镜像签名验证配置冲突
GitLab Runner或Docker可能开启了镜像签名验证,但未配置对应密钥:
- 检查
config.toml中[runners.docker]段的verify_image_signatures配置,若设置为true,需添加签名密钥或临时设为false测试:[runners.docker] verify_image_signatures = false - 修改后执行
sudo gitlab-runner restart使配置生效。
2. GitLab容器注册表镜像异常
临时切换到Docker Hub有效,说明GitLab注册表的镜像签名或同步状态存在问题:
- 在
.gitlab-ci.yml中明确指定Docker Hub的完整镜像路径:services: - docker.io/mysql:8.0.34 - 检查GitLab容器注册表中
mysql:8.0.34的状态,若为同步镜像,重新触发同步或直接使用Docker Hub镜像。
3. Runner与Docker版本兼容性问题
当前Docker版本为24.0.6,旧版GitLab Runner可能对新版Docker的镜像签名机制支持不足:
- 升级GitLab Runner至与GitLab服务器匹配的稳定版本;
- 检查containerd配置文件
/etc/containerd/config.toml,若开启镜像签名验证,需配置对应密钥或关闭验证:[plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.configs] [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.gitlab.com".tls] insecure_skip_verify = false - 修改后执行
sudo systemctl restart containerd重启服务。
4. 调整镜像拉取策略
当前拉取策略为always,每次强制拉取镜像易触发签名验证问题:
- 在
.gitlab-ci.yml中为MySQL服务指定if-not-present策略:services: - name: mysql:8.0.34 pull_policy: if-not-present - 或在Runner的
config.toml中设置默认拉取策略:[runners.docker] pull_policy = "if-not-present"
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

