繁体   English   中英

Docker 无法使用 python:3.11-rc-alpine3.14 安装 Flask-Bcrypt

[英]Docker fails to install Flask-Bcrypt with python:3.11-rc-alpine3.14

我正在尝试使用 requirements.txt 运行以下 Dockerfile。 显然,它在尝试安装 flask-bycrypt 时失败了。

我阅读了很多答案,我尝试添加开发库,甚至升级到 pip 21.2.4 或更高版本可能是一个可能的解决方案,但我没有成功。

Dockerfile:

FROM python:3.11-rc-alpine3.14

LABEL MAINTAINER="Firstname lastname <Firstname.lastname@gmail.com>"

ENV GROUP_ID=1000 \
    USER_ID=1000

RUN apk add libffi-dev
RUN apk add --no-cache python3-dev && pip3 install --upgrade pip


WORKDIR /var/www/

ADD . /var/www/



RUN pip3 --no-cache-dir install -r requirements.txt
RUN pip3 install gunicorn

RUN addgroup -g $GROUP_ID www
RUN adduser -D -u $USER_ID -G www www -s /bin/sh

USER www

EXPOSE 5000

CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"]

requirements.txt如下:

...
bcrypt==3.2.0
Flask-Bcrypt==1.0.1
Flask==2.0.3
...

以下是运行 docker compose 时出现的错误。

RUN pip3 --no-cache-dir install -r requirements.txt:                                                                                            
#13 0.907 Collecting bcrypt==3.2.0                                                                                                                                      
#13 1.010   Downloading bcrypt-3.2.0-cp36-abi3-musllinux_1_1_x86_64.whl (61 kB)                                                                                         
#13 1.033      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.6/61.6 KB 3.1 MB/s eta 0:00:00
#13 1.148 Collecting Flask-Bcrypt==1.0.1
#13 1.167   Downloading Flask_Bcrypt-1.0.1-py3-none-any.whl (6.0 kB)
#13 1.213 Collecting Flask-JWT-Extended==4.3.1
#13 1.250   Downloading Flask_JWT_Extended-4.3.1-py2.py3-none-any.whl (20 kB)
#13 1.326 Collecting Flask-RESTful==0.3.9
#13 1.342   Downloading Flask_RESTful-0.3.9-py2.py3-none-any.whl (25 kB)
#13 1.382 Collecting python-dotenv==0.20.0
#13 1.398   Downloading python_dotenv-0.20.0-py3-none-any.whl (17 kB)
#13 1.444 Collecting flask-mongoengine==1.0.0
#13 1.462   Downloading flask_mongoengine-1.0.0-py3-none-any.whl (25 kB)
#13 1.496 Collecting mongoengine-goodjson==1.1.8
#13 1.519   Downloading mongoengine_goodjson-1.1.8.tar.gz (26 kB)
#13 1.553   Preparing metadata (setup.py): started
#13 2.007   Preparing metadata (setup.py): finished with status 'done'
#13 2.040 Collecting Flask==2.0.3
#13 2.087   Downloading Flask-2.0.3-py3-none-any.whl (95 kB)
#13 2.116      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 95.6/95.6 KB 3.7 MB/s eta 0:00:00
#13 2.333 Collecting cffi>=1.1
#13 2.354   Downloading cffi-1.15.0.tar.gz (484 kB)
#13 2.522      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 484.1/484.1 KB 2.9 MB/s eta 0:00:00
#13 2.635   Preparing metadata (setup.py): started
#13 2.906   Preparing metadata (setup.py): finished with status 'done'
#13 2.947 Collecting six>=1.4.1
#13 2.967   Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
#13 3.029 Collecting Werkzeug>=0.14
#13 3.047   Downloading Werkzeug-2.1.1-py3-none-any.whl (224 kB)
#13 3.110      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 224.7/224.7 KB 3.6 MB/s eta 0:00:00
#13 3.152 Collecting PyJWT<3.0,>=2.0
#13 3.168   Downloading PyJWT-2.3.0-py3-none-any.whl (16 kB)
#13 3.304 Collecting pytz
#13 3.329   Downloading pytz-2022.1-py2.py3-none-any.whl (503 kB)
#13 3.442      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 503.5/503.5 KB 4.5 MB/s eta 0:00:00
#13 3.484 Collecting aniso8601>=0.82
#13 3.502   Downloading aniso8601-9.0.1-py2.py3-none-any.whl (52 kB)
#13 3.510      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 52.8/52.8 KB 10.2 MB/s eta 0:00:00
#13 3.550 Collecting WTForms[email]>=2.3.1
#13 3.566   Downloading WTForms-3.0.1-py3-none-any.whl (136 kB)
#13 3.589      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 136.5/136.5 KB 6.6 MB/s eta 0:00:00
#13 3.617 Collecting Flask-WTF>=0.14.3
#13 3.630   Downloading Flask_WTF-1.0.1-py3-none-any.whl (12 kB)
#13 3.665 Collecting mongoengine>=0.20
#13 3.716   Downloading mongoengine-0.24.1-py3-none-any.whl (108 kB)
#13 3.733      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 108.9/108.9 KB 8.0 MB/s eta 0:00:00
#13 3.763 Collecting dateutils
#13 3.781   Downloading dateutils-0.6.12-py2.py3-none-any.whl (5.7 kB)
#13 3.827 Collecting Jinja2>=3.0
#13 3.860   Downloading Jinja2-3.1.1-py3-none-any.whl (132 kB)
#13 3.889      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 132.6/132.6 KB 6.0 MB/s eta 0:00:00
#13 3.943 Collecting click>=7.1.2
#13 3.959   Downloading click-8.1.2-py3-none-any.whl (96 kB)
#13 3.979      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.6/96.6 KB 5.5 MB/s eta 0:00:00
#13 4.028 Collecting itsdangerous>=2.0
#13 4.049   Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)
#13 4.084 Collecting pycparser
#13 4.098   Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
#13 4.123      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.7/118.7 KB 5.5 MB/s eta 0:00:00
#13 4.216 Collecting MarkupSafe>=2.0
#13 4.230   Downloading MarkupSafe-2.1.1.tar.gz (18 kB)
#13 4.246   Preparing metadata (setup.py): started
#13 4.497   Preparing metadata (setup.py): finished with status 'done'
#13 5.036 Collecting pymongo<5.0,>=3.4
#13 5.055   Downloading pymongo-4.1.0.tar.gz (774 kB)
#13 5.231      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 774.4/774.4 KB 4.5 MB/s eta 0:00:00
#13 5.389   Preparing metadata (setup.py): started
#13 5.673   Preparing metadata (setup.py): finished with status 'done'
#13 5.724 Collecting email-validator
#13 5.737   Downloading email_validator-1.1.3-py2.py3-none-any.whl (18 kB)
#13 5.771 Collecting python-dateutil
#13 5.786   Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
#13 5.834      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 KB 5.7 MB/s eta 0:00:00
#13 5.910 Collecting idna>=2.0.0
#13 5.956   Downloading idna-3.3-py3-none-any.whl (61 kB)
#13 5.960      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 KB 87.8 MB/s eta 0:00:00
#13 5.985 Collecting dnspython>=1.15.0
#13 5.997   Downloading dnspython-2.2.1-py3-none-any.whl (269 kB)
#13 6.040      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 269.1/269.1 KB 7.0 MB/s eta 0:00:00
#13 6.098 Building wheels for collected packages: mongoengine-goodjson, cffi, MarkupSafe, pymongo
#13 6.100   Building wheel for mongoengine-goodjson (setup.py): started
#13 6.468   Building wheel for mongoengine-goodjson (setup.py): finished with status 'done'
#13 6.468   Created wheel for mongoengine-goodjson: filename=mongoengine_goodjson-1.1.8-py3-none-any.whl size=14343 sha256=4584e20f5839eacaa552ae9f9bfeeca3267bbf06afaeab0bcbc2538f532894a0
#13 6.468   Stored in directory: /tmp/pip-ephem-wheel-cache-valwcqkz/wheels/43/7f/cc/17c669e1863d0376655379c94cba6cf47ee4b58b151b34ff83
#13 6.471   Building wheel for cffi (setup.py): started
#13 6.719   Building wheel for cffi (setup.py): finished with status 'error'
#13 6.729   error: subprocess-exited-with-error
#13 6.729   
#13 6.729   × python setup.py bdist_wheel did not run successfully.
#13 6.729   │ exit code: 1
#13 6.729   ╰─> [45 lines of output]
#13 6.729       
#13 6.729           No working compiler found, or bogus compiler options passed to
#13 6.729           the compiler from Python's standard "distutils" module.  See
#13 6.729           the error messages above.  Likely, the problem is not related
#13 6.729           to CFFI but generic to the setup.py of any Python package that
#13 6.729           tries to compile C code.  (Hints: on OS/X 10.8, for errors about
#13 6.729           -mno-fused-madd see http://stackoverflow.com/questions/22313407/
#13 6.729           Otherwise, see https://wiki.python.org/moin/CompLangPython or
#13 6.729           the IRC channel #python on irc.libera.chat.)
#13 6.729       
#13 6.729           Trying to continue anyway.  If you are trying to install CFFI from
#13 6.729           a build done in a different context, you can ignore this warning.
#13 6.729       
#13 6.729       running bdist_wheel
#13 6.729       running build
#13 6.729       running build_py
#13 6.729       creating build
#13 6.729       creating build/lib.linux-x86_64-3.11
#13 6.729       creating build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/cparser.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/error.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/recompiler.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/lock.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/commontypes.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/model.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/verifier.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/pkgconfig.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/api.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/__init__.py -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/_cffi_include.h -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/parse_c_type.h -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/_embedding.h -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       copying cffi/_cffi_errors.h -> build/lib.linux-x86_64-3.11/cffi
#13 6.729       running build_ext
#13 6.729       building '_cffi_backend' extension
#13 6.729       creating build/temp.linux-x86_64-3.11
#13 6.729       creating build/temp.linux-x86_64-3.11/c
#13 6.729       gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.11 -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.11/c/_cffi_backend.o
#13 6.729       error: command 'gcc' failed: No such file or directory
#13 6.729       [end of output]
#13 6.729   
#13 6.729   note: This error originates from a subprocess, and is likely not a problem with pip.
#13 6.730   Running setup.py clean for cffi
#13 6.730   ERROR: Failed building wheel for cffi
#13 6.953   Building wheel for MarkupSafe (setup.py): started
#13 7.305   Building wheel for MarkupSafe (setup.py): finished with status 'done'
#13 7.306   Created wheel for MarkupSafe: filename=MarkupSafe-2.1.1-py3-none-any.whl size=9669 sha256=c957cf4e73fc95740c2635e7468f1c006747c5a75c1123137241ebbfe0b85e12
#13 7.307   Stored in directory: /tmp/pip-ephem-wheel-cache-valwcqkz/wheels/f2/8e/9e/4ee907ff6fb9e145722f0506c46ad9516302d1f424b43220e5
#13 7.311   Building wheel for pymongo (setup.py): started
#13 7.740   Building wheel for pymongo (setup.py): finished with status 'done'
#13 7.743   Created wheel for pymongo: filename=pymongo-4.1.0-cp311-cp311-linux_x86_64.whl size=332405 sha256=a73a7f9c879a14d99703a7adeb4171e945f426a84a5d60e6995e58941b846698
#13 7.743   Stored in directory: /tmp/pip-ephem-wheel-cache-valwcqkz/wheels/38/43/dc/94b4627e945b4995030cddfad93cb988b1c8b87876d34cb161
#13 7.747 Successfully built mongoengine-goodjson MarkupSafe pymongo
#13 7.747 Failed to build cffi
#13 7.889 Installing collected packages: pytz, aniso8601, Werkzeug, six, python-dotenv, pymongo, PyJWT, pycparser, MarkupSafe, itsdangerous, idna, dnspython, click, WTForms, python-dateutil, mongoengine, Jinja2, email-validator, cffi, Flask, dateutils, bcrypt, mongoengine-goodjson, Flask-WTF, Flask-RESTful, Flask-JWT-Extended, Flask-Bcrypt, flask-mongoengine
#13 9.922   Running setup.py install for cffi: started
#13 10.20   Running setup.py install for cffi: finished with status 'error'
#13 10.20   error: subprocess-exited-with-error
#13 10.20   
#13 10.20   × Running setup.py install for cffi did not run successfully.
#13 10.20   │ exit code: 1
#13 10.20   ╰─> [45 lines of output]
#13 10.20       
#13 10.20           No working compiler found, or bogus compiler options passed to
#13 10.20           the compiler from Python's standard "distutils" module.  See
#13 10.20           the error messages above.  Likely, the problem is not related
#13 10.20           to CFFI but generic to the setup.py of any Python package that
#13 10.20           tries to compile C code.  (Hints: on OS/X 10.8, for errors about
#13 10.20           -mno-fused-madd see http://stackoverflow.com/questions/22313407/
#13 10.20           Otherwise, see https://wiki.python.org/moin/CompLangPython or
#13 10.20           the IRC channel #python on irc.libera.chat.)
#13 10.20       
#13 10.20           Trying to continue anyway.  If you are trying to install CFFI from
#13 10.20           a build done in a different context, you can ignore this warning.
#13 10.20       
#13 10.20       running install
#13 10.20       running build
#13 10.20       running build_py
#13 10.20       creating build
#13 10.20       creating build/lib.linux-x86_64-3.11
#13 10.20       creating build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/cparser.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/error.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/recompiler.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/setuptools_ext.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/lock.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/commontypes.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/ffiplatform.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/model.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/verifier.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/cffi_opcode.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/pkgconfig.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/backend_ctypes.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/api.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/vengine_gen.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/vengine_cpy.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/__init__.py -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/_cffi_include.h -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/parse_c_type.h -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/_embedding.h -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       copying cffi/_cffi_errors.h -> build/lib.linux-x86_64-3.11/cffi
#13 10.20       running build_ext
#13 10.20       building '_cffi_backend' extension
#13 10.20       creating build/temp.linux-x86_64-3.11
#13 10.20       creating build/temp.linux-x86_64-3.11/c
#13 10.20       gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.11 -c c/_cffi_backend.c -o build/temp.linux-x86_64-3.11/c/_cffi_backend.o
#13 10.20       error: command 'gcc' failed: No such file or directory
#13 10.20       [end of output]
#13 10.20   
#13 10.20   note: This error originates from a subprocess, and is likely not a problem with pip.
#13 10.21 error: legacy-install-failure
#13 10.21 
#13 10.21 × Encountered error while trying to install package.
#13 10.21 ╰─> cffi
#13 10.21 
#13 10.21 note: This is an issue with the package mentioned above, not pip.
#13 10.21 hint: See above for output from the failure.
------
failed to solve: executor failed running [/bin/sh -c pip3 --no-cache-dir install -r requirements.txt]: exit code: 1

CFFI 没有为 Python 3.11 提供预编译的二进制文件(“wheels”),因为后者只是一个预发布版本。 结果,pip 尝试从源代码编译 CFFI,但失败了,因为在 docker 映像中找不到编译器 gcc。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM