python/flask 应用程序 dockerization 期间出现问题

这是当前的场景、docker 文件、要求和错误。有什么线索吗?这是一个带有 Flask 的大型 Python Web 应用程序,我们希望对其进行 dockerize。该问题发生在 pandas-profiling lib 依赖项安装期间,特别是 kiwisolver。见下文。


Dockerfile:


FROM python:3.8-alpine

RUN adduser -D ddc-user

WORKDIR /ddc

COPY . /ddc

RUN python -m venv venv

RUN venv/bin/pip install --upgrade pip

RUN echo "http://dl-8.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \

     && apk --no-cache --update-cache add postgresql-dev g++ linux-headers gfortran libffi-dev openssl-dev gcc build-base bash libpng-dev openblas-dev wget freetype-dev python3-dev py3-pip \

     && ln -s /usr/include/locale.h /usr/include/xlocale.h \

     && pip install setuptools wheel \

     && pip install numpy pyyaml

RUN apk add --no-cache --virtual .build-deps gcc musl-dev

RUN pip install cython

RUN apk del .build-deps gcc musl-dev

RUN venv/bin/pip install -r requirements.txt

RUN chmod +x boot.sh

ENV FLASK_APP main.py

RUN chown -R ddc-user:users ./

USER ddc-user

EXPOSE 5000

ENTRYPOINT ["./boot.sh"]

要求.txt:


alembic==0.9.9

blinker==1.4

chardet==3.0.4

click==6.7

Flask==1.0.2

Flask-Dance==0.14.0

Flask-DebugToolbar==0.10.1

Flask-Login==0.4.1

Flask-Migrate==2.1.1

Flask-OAuth==0.12

Flask-OAuthlib==0.9.4

Flask-SQLAlchemy==2.3.2

Flask-WTF==0.14.2

httplib2==0.11.3

idna==2.6

itsdangerous==0.24

Jinja2>=2.11.1

lazy==1.3

Mako==1.0.7

MarkupSafe==1.1.1

oauth2==1.9.0.post1

oauthlib==2.0.7

python-dateutil>=2.7.3

python-editor==1.0.3

requests==2.23.0

requests-oauthlib==0.8.0

SQLAlchemy==1.3.13

SQLAlchemy-Utils==0.33.2

urllib3==1.22

URLObject==2.4.3

Werkzeug==0.14.1

wincertstore==0.2

WTForms==2.1

Blueprint==3.4.2

google-cloud>=0.34.0

google-cloud-storage>=1.24.1

google-cloud-bigquery>=1.23.1

Flask-Bootstrap==3.3.7.1

six==1.13.0

flask-mail>=0.9.1

Markdown==2.6.8

itsdangerous==0.24

bleach==2.0.0

Flask-SSLify==0.1.5

gunicorn==19.7.1

gcsfs==0.3.0

cffi==1.13.2

pandas>=0.25.3

psycopg2==2.7.3

cloudstorage==0.10.0

vdm==0.15

xlrd>=1.0.0

schedule==0.6.0

Flask-HTTPAuth>=4.1.0

boto3==1.14.58

fsspec==0.8.2

pandas-profiling==2.9.0


largeQ
浏览 98回答 2
2回答

慕桂英3389331

您正在混合调用“系统” pip/python和虚拟环境中的副本。# In the "system" PythonRUN pip install setuptools wheel# In the virtual environmentRUN venv/bin/pip install -r requirements.txt由于 Docker 映像已经位于与任何特定主机系统的 Python 安装分开的隔离环境中,因此通常将内容安装到映像内的“系统”Python 中,而不使用虚拟环境。删除创建虚拟环境的行,并使用 justpip或pythonovervenv/bin/...替代方案。# Remove this line# RUN python -m venv venv# Use "pip", not "venv/bin/pip"RUN pip install --upgrade pipRUN pip install setuptools wheelRUN pip install -r requirements.txt

qq_笑_17

您的环境无权访问wheel. 您应该能够通过添加以下行来解决此问题:RUN pip install wheel在尝试安装需求文件之前,将其添加到您的 dockerfile 中。编辑:我错过了这里使用的虚拟环境。我认为在这种情况下使用虚拟环境是不必要的,除非OP 使用他们的 docker 实例并行运行多个 python 应用程序。有一些使用此模式的案例,尽管这里似乎不是这种情况。因此,我的建议是完全取消venv并简单地在 docker 实例 python 安装中安装所有依赖项,这会将每个venv/bin/pip调用转换为简单的pip调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python