开发者

使用python-slim镜像遇到无法使用PostgreSQL的问题及解决方法

目录
  • 前言
  • 报错
  • 排错
  • 解决
    • 使用 psycopg2-binary
    • 手动安装 libpq 库
  • 不同的python基础镜像
    • 小结

      前言

      之前不是把 DjangoStarter 的 docker 方案重新搞好了吗

      一开始demo部署是使用 SQLite 数据库的,用着没问题,但很快切换到 PostgreSQL 的时候就遇到问题了…

      报错

      docker 启动之后,app 容器报错

      django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 or psycopg module

      排错

      一开始我还以为是 psycopg2 库装不上,或者是在 python_builder 阶段的依赖没有正确复制到 final 阶段的容器,但后面改了几个地方,重新试了一下都不行。

      接下来使用 python src/manage.py shell 进入 shell,测试一下能否导入 psycopg2 库

      >>> javascriptimport psycopg2
      Traceback (most recent call last):
        File "<console>", line 1, in <module>
        File "/project/.venv/lib/python3.11/site-packages/psycopg2/__init__.py", line 51, in <module>
          from psycopg2._psycopg import (                     # noqa
      ImportError: libpq.so.5: cannot open shared object file: No such file or directory

      好的,经常被 docker 坑的人应该已经看出问题出在系统环境上了

      不使用 slim 镜像换成普通的 python 镜像就正常了…

      解决

      OK,既然找出问题原因,那么就可以来着手解决了。

      使用 psycopg2-binary

      最简单的方法就是将 psycopg2 库换成 psycopg2-binary,这是一个预编译的 psycopg2 包,不需要编译环境,安装更简便。http://www.devze.com

      手动安装 libpq 库

      既然缺了 libpq 库,那就在 docker 镜像里安装。

      这个方法我还没测试,又麻烦又不优雅

      # 使用 Python 3.11 slim 基础镜像
      FROM python:3.11-slim
      # 安装 psycopg2 依赖
      RUN apt-get update && apt-get install -y \
          libpq-dev \
          gcc \
          # 清理缓存以减少镜像大小
          && apt-get clean \
          && rm -rf /var/lib/apt/lists/*

      不同的python基础镜像

      python镜像基于 Debian 系统,默认是用 Debian 的最新稳定版,也可以自己指定版本,比如 python3.11-slim-bookworm 就是指定用 Debian 12 ("bookworm") 作为基础镜像

      • python3.11-slim-bookworm 基编程础镜像打包出来的镜像大小是424MB,python3.11-slim 打包出来也是这个大小
      • 使用 python3.11 基础镜像打包出来就到 1.3G 了,大小编程客栈直接翻了几倍

      还可以选择 alpine 镜像,不过可能会遇到更多兼容性问题,我就不折腾了,心累。

      小结

      一般选 slim 镜像还是可以的,基于 Debian 不怎么需要担心兼容性问题

      偶尔遇到小问php题还是比较好解决的

      alpine 镜像不一样的地方就很多了,太折腾了…

      到此这篇关于使用python-slim镜像遇到无法使用PostgreSQL的问题的文章就介绍到这了,更多相关python-slim无法使用PostgreSQL内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新数据库

      数据库排行榜