首页 > 解决方案 > 使用 exec (shell) 运行 Docker 后以非 root 身份运行命令

问题描述

我有一个使用 Docker(在 Ubuntu 中)和 MySQL 作为数据库的 Django 项目,一切正常。我只是好奇:

而不是像这样运行长命令:

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 . 

但是我很好奇是否还有其他方法,以便我可以以非 root 身份运行 exec 并从内部修改我的文件,而不是每次都更改所有者。

码头工人撰写:

    version: '3.9'
    services:
        backend:
            build: .
            volumes: 
                - .:/backend
            ports: 
                - 8000:8000   
            depends_on: 
                - db
        db:
            image: mysql:latest
            environment:
                MYSQL_DATABASE: 'pass'
                MYSQL_ROOT_PASSWORD: 'pass'
            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

标签: djangodockerubuntu

解决方案


我找到了答案,只需在 dockerfile (后端目录)末尾使用这些行在 docker 文件中添加一个用户:

RUN adduser myuser
USER myuser

如果使用 Django rest 框架和 React,请在 dockerfile(前端目录)的 enf 中添加这一行

USER node

我发现,所有的官方 Node.js 镜像都在上游镜像中添加了一个 Linux 用户,称为 node。

现在可以在没有权限限制的情况下从外部或内部修改同一个文件


推荐阅读