You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:02:53