构建Docker容器遇PostgreSQL源报错:无Release文件,求Dockerfile修改方案
解决Debian Jessie容器构建时PostgreSQL源失效问题
问题背景
构建Docker容器时触发APT源错误,原因是Debian Stretch版本已终止支持,对应的PostgreSQL官方源(stretch-pgdg)已被移除,导致apt-get update失败。
错误日志
W: The repository 'http://apt.postgresql.org/pub/repos/apt stretch-pgdg Release' does not have a Release file. E: Failed to fetch http://apt.postgresql.org/pub/repos/apt/dists/stretch-pgdg/11/binary-amd64/Packages 404 Not Found [IP: 147.75.85.69 80] E: Some index files failed to download. They have been ignored, or old ones used instead. ERROR: Service 'db' failed to build: The command '/bin/sh -c apt-get update && apt-get install dos2unix && apt-get clean' returned a non-zero code: 100
涉及的Dockerfile片段
FROM debian:jessie MAINTAINER Open Knowledge # Install required system packages RUN apt-get -q -y update \ && DEBIAN_FRONTEND=noninteractive apt-get -q -y upgrade \ && apt-get -q -y install \ curl \ python-dev \ python-pip \ python-virtualenv \ python-wheel \ libpq-dev \ libxml2-dev \ libxslt-dev \ libgeos-dev \ libssl-dev \ libxslt-dev \ libgeos-dev \ libssl-dev \ libffi-dev \ postgresql-client \ build-essential \ git-core \ vim \ wget \ && apt-get -q clean \ && apt-get install -y dos2unix
修改方案
1. 替换为Debian归档源
Debian Jessie已停止官方支持,需将系统源切换至归档服务器,同时移除失效的PostgreSQL官方源:
在apt-get update前添加源替换命令,修改后的RUN指令如下:
RUN echo "deb http://archive.debian.org/debian/ jessie main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://archive.debian.org/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list \ && rm -f /etc/apt/sources.list.d/pgdg.list 2>/dev/null \ && apt-get -q -y update \ && DEBIAN_FRONTEND=noninteractive apt-get -q -y upgrade \ && apt-get -q -y install \ curl \ python-dev \ python-pip \ python-virtualenv \ python-wheel \ libpq-dev \ libxml2-dev \ libxslt-dev \ libgeos-dev \ libssl-dev \ libxslt-dev \ libgeos-dev \ libssl-dev \ libffi-dev \ postgresql-client \ build-essential \ git-core \ vim \ wget \ && apt-get -q clean \ && apt-get install -y dos2unix
2. 优化镜像构建(可选)
将单独的dos2unix安装命令合并到前面的安装列表中,减少镜像层并避免重复操作:
FROM debian:jessie MAINTAINER Open Knowledge # Install required system packages RUN echo "deb http://archive.debian.org/debian/ jessie main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://archive.debian.org/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list \ && rm -f /etc/apt/sources.list.d/pgdg.list 2>/dev/null \ && apt-get -q -y update \ && DEBIAN_FRONTEND=noninteractive apt-get -q -y upgrade \ && apt-get -q -y install \ curl \ python-dev \ python-pip \ python-virtualenv \ python-wheel \ libpq-dev \ libxml2-dev \ libxslt-dev \ libgeos-dev \ libssl-dev \ libffi-dev \ postgresql-client \ build-essential \ git-core \ vim \ wget \ dos2unix \ && apt-get -q clean
说明
- 切换到归档源后,系统会从Debian官方归档服务器拉取Jessie版本的软件包,包括适配的
postgresql-client版本,无需依赖已失效的PostgreSQL官方源。 - 移除
pgdg.list文件是为了彻底清除可能自动添加的PostgreSQL第三方源配置,避免再次触发错误。
内容的提问来源于stack exchange,提问作者bubamara
相关产品推荐
相关产品推荐

