【问题标题】:Run commands inside Docker as non root after running it with exec (shell)使用 exec (shell) 运行 Docker 后以非 root 身份运行命令
【发布时间】:2021-10-11 09:42:32
【问题描述】:

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

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

docker-compose run backend python manage.py startapp myapp
# 'backend' is the name of service in docker-compose file

我喜欢这样打开shell:

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

【问题讨论】:

  • 与其尝试使用 Docker 进行日常开发,可以使用 Python 虚拟环境吗?然后在部署时,删除覆盖/backend 目录的volumes: 块,以便使用映像中代码的(经过集成测试的)副本?
  • 非常感谢您的回答,但我找到了解决方法

标签: django docker ubuntu


【解决方案1】:

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

RUN adduser myuser
USER myuser

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

USER node

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2015-07-07
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多