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