执行docker-compose up时Dockerfile的PostgreSQL apt源签名验证失败如何解决
问题原因
- 构建环境网络异常导致
apt-key无法正常拉取PostgreSQL官方公钥,公钥未导入成功因此源签名验证失败 - 从报错日志可知你的基础镜像为Ubuntu 20.04(focal版本),但配置的是适配Ubuntu 18.04的bionic版本PG源,版本不匹配也可能引发兼容问题
apt-key在新版Ubuntu系统中已被官方废弃,本身存在兼容性问题,容易出现拉取公钥失败的情况
解决方案
将原RUN指令替换为以下内容,改用官方推荐的公钥配置方式,同时修正源版本匹配问题:
RUN apt-get update \ && apt-get install -y ca-certificates gnupg curl \ && curl -fsSL https://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg \ && echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" >> /etc/apt/sources.list.d/pgdg.list \ && apt-get update \ && apt-get -y install libpq-dev=13.* \ && apt-get -y install python3.8-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*
修改说明
- 先安装
ca-certificates、gnupg、curl依赖,确保可以正常拉取公钥、处理HTTPS请求 - 放弃废弃的
apt-key工具,直接用curl拉取公钥后通过gpg处理存入官方推荐的密钥目录,稳定性更高 - 将PG源版本修正为和基础镜像匹配的
focal-pgdg,如果确实需要使用bionic版本的源,把这段里的focal-pgdg改回bionic-pgdg即可 - 将源配置单独写入
/etc/apt/sources.list.d/pgdg.list,避免污染系统主源配置文件 - 可选添加清理缓存的步骤,减小最终镜像体积
异常排查
如果修改后还是报错,可按以下步骤排查:
- 检查构建机器的网络是否能正常访问apt.postgresql.org,存在网络限制的话可以提前把公钥下载到构建上下文,用COPY指令复制到镜像内再导入,不需要在线拉取
- 可在导入公钥的步骤前添加
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FCC7D46ACCC4CF8,从公钥服务器直接拉取对应PG公钥
内容的提问来源于stack exchange,提问作者Takito Isumoro
相关产品推荐
相关产品推荐

