使用exec (shell)运行Docker后,以非root身份运行Docker内部的命令



我有一个Django项目与Docker(在Ubuntu)和MySQL作为数据库,一切都在工作。我只是好奇:

而不是运行长命令:

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 . 

但是我很好奇是否有任何其他的方法,这样我就可以运行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: '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

我找到了答案,只需在dockerfile(后端目录)的末尾添加以下几行在dockerfile中添加一个用户:

RUN adduser myuser
USER myuser

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

USER node

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

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

最新更新