Выполнение команд внутри 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.

и теперь можно модифицировать один и тот же файл снаружи или изнутри без ограничения прав доступа

Вернуться на верх