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

GitLab Registry构建python:3.7镜像时公钥验证失败

解决GitLab CI构建Python3.7+镜像时apt-get公钥验证失败问题
  • 手动添加缺失公钥(推荐新方式)
    弃用过时的apt-key命令,改用官方推荐的密钥环方式。把错误提示里NO_PUBKEY XXXXXXXX中的公钥ID替换到以下命令中:

    RUN apt-get update && apt-get install -y --no-install-recommends gnupg2 curl
    # 下载并导入对应公钥到密钥环
    RUN curl -fsSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x<你的公钥ID> | gpg --dearmor -o /usr/share/keyrings/ubuntu-archive-keyring.gpg
    # 重新指定带签名验证的源
    RUN echo "deb [signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse" > /etc/apt/sources.list.d/ubuntu-focal.list
    

    若使用Debian系的Python镜像(如slim版本),替换为Debian对应的源与公钥服务器即可。

  • 替换国内镜像源绕开公钥问题
    官方源公钥同步延迟可能引发验证失败,直接替换为国内稳定镜像源:

    # 针对Ubuntu基础镜像
    RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    # 针对Debian基础镜像
    RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
    
  • 禁用CI构建缓存
    本地构建正常但CI失败,大概率是CI Runner的Docker缓存留存了旧的问题镜像层。在GitLab CI脚本中添加--no-cache强制全量重新构建:

    build_image:
      stage: build
      script:
        - docker build --no-cache -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
    
  • 匹配基础镜像的发行版
    Python3.6与3.7+的基础镜像可能基于不同的Debian/Ubuntu发行版(比如3.6基于Buster,3.7基于Bullseye),不同发行版的源公钥存在差异。可在Dockerfile开头先确认基础镜像的发行版:

    RUN cat /etc/os-release
    

    再根据输出的VERSION_CODENAME对应添加正确的源与公钥。

内容的提问来源于stack exchange,提问作者Rafael Nobre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:07:44