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
相关产品推荐
相关产品推荐

