Необходимо быть суперпользователем для редактирования файла приложения django. Проект django имеет Docker-контейнер
Я клонировал, следовал инструкциям и установил проект Docker, Django, Postgres с Github Docker на моей машине Linux. Я использовал docker compose run web django-admin startapp auth
для настройки каталога приложения. Когда я редактирую файл в auth
, например auth/models.py
, я получаю сообщение об ошибке недостаточных разрешений.
auth/
принадлежит root, что сбивает с толку, потому что manage.py
принадлежит мне. Я запустил sudo chown -R $USER:$USER composeexample manage.py
в соответствии с инструкциями ReadMe.
Я не хочу, чтобы мне приходилось chown
каждое новое приложение, которое я создаю.
Мой пользователь является членом группы docker.
getent group docker
возвращает docker:x:998:meeee
Это распространенная проблема в системах разработки, использующих Docker (и Docker Compose), когда ваш контейнер запускается как root
. Вероятно, вы монтируете том в своей установке Docker, таким образом записывая из контейнера в локальную файловую систему, например
docker run --rm -it -v .:/app ubuntu:rolling
или, как установка Docker Compose (docker-compose.yml
),
services:
app:
image: ubuntu:rolling
volumes:
- .:/app
Проблема в том, что ваш контейнер работает как root
, следовательно, файлы, созданные на томе внутри вашего контейнера, принадлежат root
(внутри и вне вашего контейнера, из-за тома).
Использовать непривилегированного пользователя
Вы можете исправить это, запустив контейнер с непривилегированным пользователем, например
docker run --rm -it -u ${UID} -v .:/app ubuntu:rolling python manage.py
или
docker compose run -u ${UID} app python manage.py
Установите USER
в вашем Dockerfile
Обратите внимание, что лучшие практики в области Docker рекомендуют настроить образ Docker на запуск от имени непривилегированного пользователя, задав USER
в Dockerfile
, например
FROM ubuntu:rolling
RUN apt update && apt install -y python3-pip
WORKDIR /app
USER ubuntu
RUN pip install django
COMMAND python manage.py runserver
Подобная настройка позволяет устанавливать системные зависимости как root
, а программы пользовательского пространства - как непривилегированный пользователь, которого контейнер будет использовать и при последующем запуске контейнера.
Хотя это необязательно для решения вашей проблемы (если вы всегда запускаете Docker с опцией -u
), это настоятельно рекомендуется, поскольку делает вашу установку более безопасной.