Отказано в разрешении после создания приложения django внутри контейнера docker

#python #djan&o #docker #docker-compose

#python #djan&o #docker #docker-compose

Вопрос:

Итак, я следую этому руководству и дошел до раздела «медиа», и когда я запускаю команду:

docker-compose exec web python mana&e.py startapp upload

все работает нормально, но когда я открываю недавно созданный views.py файл, редактирование и попытка сохранить я получаю ошибку «отказано в разрешении». Я могу открыть файл от имени root и отредактировать его, но теперь через мой редактор кода Atom. Я не знаю, где я ошибаюсь, может кто-нибудь мне помочь? Вот мой код:

Dockerfile:

 # pull official base ima&e
FROM python:3.8.3-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycop&2 dependencies
RUN apk update 
    amp;amp; apk add post&resql-dev &cc python3-dev musl-dev

# install dependencies
RUN pip install --up&rade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# copy entrypoint.sh
COPY ./entrypoint.sh .

# copy project
COPY . .

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
  

docker-compose.yml:

 
services:
  web:
    build: ./app
    command: python mana&e.py runserver 0.0.0.0:8000
    volumes:
      - ./app/:/usr/src/app/
    ports:
      - 8000:8000
    env_file:
      - ./.env.dev
    depends_on:
      - db
  db:
    ima&e: post&res:12.0-alpine
    volumes:
      - post&res_data:/var/lib/post&resql/data/
    environment:
      - POSTGRES_USER=hello_djan&o
      - POSTGRES_PASSWORD=hello_djan&o
      - POSTGRES_DB=hello_djan&o_dev

volumes:
  post&res_data:

  

entrypoint.sh:

 
if [ "$DATABASE" = "post&res" ]
then
    echo "Waitin& for post&res..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done

    echo "Post&reSQL started"
fi

# python mana&e.py flush --no-input
# python mana&e.py mi&rate

exec "$@"
  

Ответ №1:

попробуйте выполнить выпуск chmod 777 -R в папке, где оно находится.

Комментарии:

1. Хорошо, итак, я открыл свой терминал, запустил chmod 777 -R uploads (папка приложения), и это работает. Должен ли я добавить эту команду в свой Dockerfile, чтобы избежать этой проблемы? Почему он это делает в первую очередь. Я пытаюсь изучить лучшие практики

2. по умолчанию у изображения, на котором вы основываетесь, есть несколько пользователей по умолчанию (просто не знаю в вашем случае), но, например, для post&res .. у него есть пользователь post&res .., чтобы ответить на ваш вопрос.. это зависит от вашего случая .. но самым безопасным будет запуск chown в папке, основанной на пользователе..