Выполнение команд внутри docker от имени не root после запуска с помощью exec (shell)
У меня есть проект Django с Docker (в Ubuntu) и MySQL в качестве базы данных, все работает .Мне просто интересно:
вместо того, чтобы выполнять длинную команду типа:
docker-compose run backend python manage.py startapp myapp // 'backend' is the name of service in docker-compose file
я хочу открыть оболочку следующим образом:
docker-compose run backend sh
и затем выполните мою команду:
python manage.py startapp myapp
но в этом случае он будет создан root'ом, поэтому я не смогу изменить/сохранить его извне, (требуются разрешения)
я решаю это с помощью:
sudo chown -R $USER:$USER .
но мне интересно, есть ли другие способы, чтобы я мог запустить exec и изменить свой файл изнутри как не root, вместо того, чтобы каждый раз менять владельца.
docker-compose:
version: '3.9'
services:
backend:
build: .
volumes:
- .:/backend
ports:
- 8000:8000
depends_on:
- db
db:
image: mysql:latest
environment:
MYSQL_DATABASE: 'django-app-db'
MYSQL_ROOT_PASSWORD: root
volumes:
- ./data/mysql/db:/var/lib/mysql
Dockerfile:
FROM python:3.9
ENV PYTHONUNBUFFERED 1
WORKDIR /backend
COPY requirements.txt backend/requirements.txt
RUN pip install -r backend/requirements.txt
COPY . /backend
CMD python manage.py runserver 0.0.0.0:8000
Я нашел ответ, просто добавить пользователя в файл docker с помощью этих строк в конце dockerfile (директория backend):
RUN adduser myuser
USER myuser
если вы работаете с Django rest framework и React, добавьте эту строку в конец dockerfile (директория front end)
USER node
Как я выяснил, во всех официальных образах Node.js пользователь Linux добавлен в образ upstream под названием node.
и теперь можно модифицировать один и тот же файл снаружи или изнутри без ограничения прав доступа