使用python-slim鏡像遇到無法使用PostgreSQL的問題及解決方法
前言
之前不是把 DjangoStarter 的 docker 方案重新搞好了嗎
一開始demo部署是使用 SQLite 數(shù)據(jù)庫的,用著沒問題,但很快切換到 PostgreSQL 的時候就遇到問題了…
報錯
docker 啟動之后,app 容器報錯
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 or psycopg module
排錯
一開始我還以為是 psycopg2
庫裝不上,或者是在 python_builder
階段的依賴沒有正確復制到 final
階段的容器,但后面改了幾個地方,重新試了一下都不行。
接下來使用 python src/manage.py shell
進入 shell,測試一下能否導入 psycopg2
庫
>>> import 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
好的,經(jīng)常被 docker 坑的人應該已經(jīng)看出問題出在系統(tǒng)環(huán)境上了
不使用 slim 鏡像換成普通的 python 鏡像就正常了…
解決
OK,既然找出問題原因,那么就可以來著手解決了。
使用 psycopg2-binary
最簡單的方法就是將 psycopg2 庫換成 psycopg2-binary,這是一個預編譯的 psycopg2
包,不需要編譯環(huán)境,安裝更簡便。
手動安裝 libpq 庫
既然缺了 libpq 庫,那就在 docker 鏡像里安裝。
這個方法我還沒測試,又麻煩又不優(yōu)雅
# 使用 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 系統(tǒng),默認是用 Debian 的最新穩(wěn)定版,也可以自己指定版本,比如 python3.11-slim-bookworm
就是指定用 Debian 12 ("bookworm") 作為基礎鏡像
- python3.11-slim-bookworm 基礎鏡像打包出來的鏡像大小是424MB,python3.11-slim 打包出來也是這個大小
- 使用 python3.11 基礎鏡像打包出來就到 1.3G 了,大小直接翻了幾倍
還可以選擇 alpine 鏡像,不過可能會遇到更多兼容性問題,我就不折騰了,心累。
小結
一般選 slim 鏡像還是可以的,基于 Debian 不怎么需要擔心兼容性問題
偶爾遇到小問題還是比較好解決的
alpine 鏡像不一樣的地方就很多了,太折騰了…
到此這篇關于使用python-slim鏡像遇到無法使用PostgreSQL的問題的文章就介紹到這了,更多相關python-slim無法使用PostgreSQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用docker compose啟動postgresql的示例代碼
要在啟動 PostgreSQL 容器時執(zhí)行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目錄,這個目錄下的 SQL 文件會在容器啟動時被自動執(zhí)行,下面是如何修改 Docker Compose 配置文件,以便在啟動時執(zhí)行初始化 SQL 腳本,需要的朋友可以參考下2024-10-10PostgreSQL對GROUP BY子句使用常量的特殊限制詳解
這篇文章主要介紹了PostgreSQL對GROUP BY子句使用常量的特殊限制詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02PostgreSQL用戶、數(shù)據(jù)庫及表的管理、操作與授權方式
這篇文章主要介紹了PostgreSQL用戶、數(shù)據(jù)庫及表的管理、操作與授權操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL設置時區(qū)、時間/日期函數(shù)匯總大全
PostgreSQL是一款簡介而又性能強大的數(shù)據(jù)庫應用程序,其在日期時間數(shù)據(jù)方面所支持的功能也都非常給力,這篇文章主要給大家介紹了關于PostgreSQL設置時區(qū)、時間/日期函數(shù)的相關資料,需要的朋友可以參考下2023-09-09PostGresql 實現(xiàn)四舍五入、小數(shù)轉換、百分比的用法說明
這篇文章主要介紹了PostGresql 實現(xiàn)四舍五入、小數(shù)轉換、百分比的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01