【问题标题】:How to solve libpq.so.5 Import error when running postgresql on alpine in docker如何解决在 docker 中在 alpine 上运行 postgresql 时出现 libpq.so.5 导入错误
【发布时间】:2021-03-28 19:35:38
【问题描述】:

您好,我正在尝试使用 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 

【问题讨论】:

    标签: postgresql flask sqlalchemy flask-sqlalchemy psycopg2


    【解决方案1】:

    您似乎在您的Dockerfile 中使用分阶段构建,而您的apk add postgresql-libs 处于第一阶段。第二个FROM 阶段是建立在一个普通的python:3.8.1-alpine3.10 之上的,而不是你在它上面所做的所有事情,你只是将/usr/local/lib/python3.8/site-packages/ 复制到第二阶段。您要么需要找到所有这些依赖项的完整路径(这可能非常乏味),要么只在第二阶段安装依赖项。因此,您需要使用FROM build 构建您的第二阶段(以包括所有其他apk deps),或者您需要在第二阶段添加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
    <...>
    

    【讨论】:

    • 它对我有用,只需在第二个 FROM 之后添加 RUN apk add --no-cache libpq 而无需重新安装 postgresql-libs gcc libc-dev。我正在使用 arm32v7/python:3.8-alpine3.12
    【解决方案2】:

    通过将我的 psycopg2 导入更改为 psycopg2-binary 为我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2021-09-10
      相关资源
      最近更新 更多