Python3.9.6及以上基础镜像为何无法定位postgresql-client-11包?
问题根因
Python官方镜像从3.9.6版本开始,默认无后缀标签的基础镜像底层操作系统从Debian 10(Buster)切换为Debian 11(Bullseye):
- Debian 10默认软件源内置
postgresql-client-11安装包,因此基于python:3.9.5构建时可直接安装成功 - Debian 11默认软件源提供的PostgreSQL客户端版本为13,无
postgresql-client-11安装包,因此构建时抛出E: Unable to locate package postgresql-client-11错误。
可行解决方案
根据实际场景选择对应方案即可:
- 方案1:无强制版本要求,安装系统源默认的PostgreSQL客户端
移除包名后的固定版本号,适配不同Debian版本的默认软件源,避免后续基础镜像升级时出现同类构建错误,Dockerfile配置参考:FROM python:3.9.6 RUN apt-get update && apt-get install -y postgresql-client && rm -rf /var/lib/apt/lists/* - 方案2:必须使用postgresql-client-11,且保留默认Debian 11底包的镜像
先添加PostgreSQL官方适配Debian 11的软件源,再执行安装操作,安装完成后清理无用依赖和缓存以缩小镜像体积,Dockerfile配置参考:FROM python:3.9.6 RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates wget gnupg2 \ && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor > /usr/share/keyrings/postgresql.gpg \ && echo "deb [signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ && apt-get update && apt-get install -y postgresql-client-11 \ && apt-get purge -y --auto-remove ca-certificates wget gnupg2 \ && rm -rf /var/lib/apt/lists/* - 方案3:必须使用postgresql-client-11,且不希望添加第三方软件源
直接指定使用Debian 10(Buster)底包的Python镜像变体,该变体底层系统与python:3.9.5完全一致,默认源内置postgresql-client-11,Dockerfile配置参考:FROM python:3.9.6-buster RUN apt-get update && apt-get install -y postgresql-client-11 && rm -rf /var/lib/apt/lists/*
内容的提问来源于stack exchange,提问作者sp1rs
相关产品推荐
相关产品推荐

