Проблема с запуском Docker контейнера в приложении Flask

Рейтинг: 2Ответов: 1Опубликовано: 28.04.2023

Я собрала Docker образ из этого Dockerfile:

FROM python:3.8

ENV APP_HOME /app
WORKDIR $APP_HOME

COPY . .

RUN pip install --no-cache-dir -r requirements.txt

CMD ["python", "cookbook.py"]

Но при запуске контейнера он сразу же автоматически останавливается и в логах этого контейнера мне выдаёт такую ошибку:

Traceback (most recent call last):
  File "cookbook.py", line 1, in <module>
    from blog import app, db
  File "/app/blog/__init__.py", line 9, in <module>
    from flask_uploads import UploadSet, IMAGES, configure_uploads
  File "/usr/local/lib/python3.8/site-packages/flask_uploads.py", line 26, in <module>
    from werkzeug import secure_filename, FileStorage
ImportError: cannot import name 'secure_filename' from 'werkzeug' (/usr/local/lib/python3.8/site-packages/werkzeug/__init__.py)

Искала решение этой проблемы, советовали изменить

from werkzeug import secure_filename,FileStorage

на

from werkzeug.utils import secure_filename
from werkzeug.datastructures import  FileStorage

в файле flask-uploads.py. Но в моем файле эти импорты именно так и выглядят. Подскажите пожалуйста, что я делаю не так

Ответы

▲ 1

Проблема в использовании зависимости Flask-Uploads, которая, судя по всему, не особенно активно поддерживается мэйнтейнерами и сломана после выхода Werkzeug 1.0.0.

В качестве workaround можно:

  • установить исправленную версию с Github (не лучшее решение):

    pip install git+https://github.com/maxcountryman/flask-uploads.git 
    
  • перейти на использование форка https://github.com/jugmac00/flask-reuploaded


Подробнее о проблеме можно почитать у автора форка: https://jugmac00.github.io/blog/flask-reuploaded/