Ошибка получения разрешения отказа при настройке Docker, nginx, uwsgi. Я могу вручную записывать файлы внутри контейнера

Я пытаюсь настроить фляжное приложение для работы с использованием докеров, nginx и uwsgi.

Докер-файл:

# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /flask_app

RUN apt-get clean \
    && apt-get -y update

RUN apt-get -y install nginx \
    && apt-get -y install python3-dev \
    && apt-get -y install build-essential

EXPOSE 8080
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt --src /usr/local/src

COPY . .

COPY nginx.conf /etc/nginx

RUN chmod +x ./start.sh

CMD ["./start.sh"]

# CMD [ "python3", "-m" , "flask", "--app", "main", "run", "--host=0.0.0.0", "-p", "5001"]

uwsgi.ini

`[uwsgi]
module = main:app
uid = www-data
gid = www-data
master = true
processes = 5

#socket = /tmp/uwsgi.socket
socket = 127.0.0.1:8080
chmod-socket = 666
vacuum = true

die-on-term = true`

nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
    use epoll;
    multi_accept on;
}

http {
    access_log /dev/stdout;
    error_log /dev/stdout;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    index   index.html index.htm;

    # Configuration containing list of application servers
    upstream uwsgicluster {

        server 127.0.0.1:8080;
        # server 127.0.0.1:8081;
        # ..
        # .

    }

    server {
        listen       8888 default_server;
        listen       [::]:8888 default_server;
        server_name  localhost;
        root         /var/www/html;

        location / {
            include uwsgi_params;
            uwsgi_pass uwsgicluster;

            uwsgi_read_timeout 1h;
            uwsgi_send_timeout 1h;
            proxy_send_timeout 1h;
            proxy_read_timeout 1h;

        }
    }
}

Веб-приложение работает успешно, пока я не попытаюсь загрузить изображение для отображения. Сохранение его в папку для загрузки в разделе static/uploads возвращает эту ошибку: PermissionError: [Errno 13] Permission denied: 'static/uploads/timyoutube.jpg'

Я ожидаю, что не получу эту ошибку, поскольку она работает с использованием фляги в режиме разработки.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 165
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема оказалась проблемой с правами доступа, поскольку пользователь www-data не имел прав на запись.

Я изменил владельца рабочего каталога на www-data, и это решило проблему.

RUN chown -R www-data:www-data /flask_app

Другие вопросы по теме

Как организовать многоэтапные Dockerfiles для многомодульных микросервисов с общими модулями
Не удается сделать HTTP-запросы из контейнера докеров наружу
Файлы журнала контейнера Docker теряются после каждого развертывания из Gitlab runner
Запуск образа докера, созданного с помощью многослойного докера, завершается неудачно — Nexts не может найти модуль реакции
TestContainers и ошибка: «Не удалось проверить соединение org.postgresql.jdbc.PgConnection» (поднятие одного контейнера для всех тестовых классов)
Докеризованный образ PostgreSQL: где получить доступ к CSV-файлу для ввода?
Docker (Apple Silicon/M1 Preview) MySQL «нет соответствующего манифеста для linux/arm64/v8 в записях списка манифеста»
Как настроить правильный nginx.conf для работы в качестве прокси-сервера с образом Alpine Docker?
Как разделить объем докера между двумя сервисами, чтобы один из них был источником правды?
Приложение узла внутри докера не может подключиться к другому приложению узла