postgresql - 如何解决在docker中在alpine上运行postgresql时出现libpq.so.5导入错误
问题描述
嗨,我正在尝试使用 SQLAlchemy 和烧瓶在 docker 中的 alpine 中运行 postgresql,但是每当我运行我的应用程序时,我都会收到此错误ImportError: Error loading shared library libpq.so.5: No such file or directory (needed by /usr/local/lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-x86_64-linux-gnu.so)
,我已经梳理了堆栈溢出以寻求解决方案,但他们似乎都告诉我安装我已经完成的 psycopg2
FROM python:3.8.1-alpine3.10 AS build
# ENV PYTHONUNBUFFERED 1
WORKDIR /usr/src/app/restful
COPY requirements.txt /usr/src/app/restful
RUN python -m pip install --upgrade pip
RUN apk update && apk upgrade
RUN apk add libffi-dev
#installing dependencies
# dependencies for libpq postgresql-libs postgresql-dev *remove if not
RUN apk add --no-cache --virtual .build-deps gcc libc-dev py-cryptography libpq postgresql-libs postgresql-dev python3-dev musl-dev make openssl-dev gcc
RUN apk update && apk add --no-cache ca-certificates \
&& update-ca-certificates 2>/dev/null || true
RUN apk add build-base python-dev py-pip jpeg-dev zlib-dev
ENV LIBRARY_PATH=/lib:/usr/lib
WORKDIR /usr/src/app/restful
COPY requirements.txt /usr/src/app/restful
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN python -m pip install --upgrade pip
RUN pip install -r requirements.txt
RUN pip install gevent
FROM python:3.8.1-alpine3.10
COPY --from=build /usr/local/lib/python3.8/site-packages/ /usr/local/lib/python3.8/site-packages/
RUN mkdir -p /usr/src/app/restful
RUN set -ex && apk --no-cache add sudo
RUN apk --no-cache --update add libffi libressl
RUN apk update && apk add --no-cache supervisor
RUN pip install psycopg2-binary
解决方案
您似乎在使用分阶段构建Dockerfile
,并且您apk add postgresql-libs
处于第一阶段。第二FROM
阶段是建立在一个简单的python:3.8.1-alpine3.10
基础上,而不是建立在你在它上面所做的所有事情上,你只是复制/usr/local/lib/python3.8/site-packages/
到第二阶段。您要么需要找到所有这些依赖项的完整路径(这可能非常乏味),要么只在第二阶段安装依赖项。因此,您需要使用FROM build
(包括所有其他 apk 依赖)构建您的第二阶段,或者您需要RUN apk add postgresql-libs gcc libc-dev
在第二阶段添加。
所以根据你的目的,你可能需要这个:
<...>
RUN pip install -r requirements.txt
RUN pip install gevent
FROM build
RUN mkdir -p /usr/src/app/restful
<...>
或这个:
<...>
RUN set -ex && apk --no-cache add sudo
RUN apk --no-cache --update add libffi libressl postgresql-libs gcc libc-dev
RUN apk update && apk add --no-cache supervisor
<...>
推荐阅读
- javascript - 如何使用nodejs正确登录并表达
- php - 将经过身份验证的用户重定向到注册页面以外的其他页面
- ruby - 有没有办法使用 set_form 方法在多部分请求中设置内容类型?
- azure-devops - Azure Devops VS 测试任务中的问题代码覆盖率。.Coverage 未创建
- c# - 在 ASP.Net Core 中使用分页传递模型参数
- python-3.x - 如何将多索引日期时间索引转换为整数?
- sql-server - SQL中的有界累积和
- unity3d - 由于(违反元数据政策)从谷歌游戏商店中删除应用程序
- sql - 反转字符串中每个其他字符的顺序
- python - BeautifulSoup:抓取所有内容
- 在每个标题之后