如何在Docker镜像中创建具有正确文件权限的用户

10 浏览
0 Comments

如何在Docker镜像中创建具有正确文件权限的用户

我有一个名为的Python软件包,我想在Docker镜像中安装它。我想在镜像中创建一个名为的用户,而不仅仅是以root身份运行。这是我的Dockerfile。

# syntax=docker/dockerfile:1

FROM python:3

# 创建一个用户。

RUN useradd --user-group --system --no-log-init --create-home myuser

RUN chown -R myuser:myuser /home/myuser

USER myuser

# 安装软件包。

RUN python -m pip install --upgrade pip

WORKDIR /home/myuser

COPY . ./mypackage

RUN pip install /home/myuser/mypackage && rm -rf /home/myuser/mypackage

由于myuser在/home/myuser文件夹中没有写入权限,所以pip install失败。如果我在最后一步之前构建镜像,然后查看目录权限,所有权仍然属于root。

$ ls -l

total 4

drwxr-xr-x 3 root root 4096 Aug 16 14:21 mypackage

我猜错误在于chown语句,但我将逻辑从另一个Stack Overflow答案中复制过来,看起来没问题。

我做错了什么?

0
0 Comments

问题的原因是在Docker镜像中创建用户时,没有正确设置文件权限。解决方法是在COPY命令中指定用户和组,使用--chown选项。

下面是一个修复后的Dockerfile示例:

FROM python:3
# 创建一个用户。
RUN useradd --user-group --system --no-log-init --create-home myuser
USER myuser
# 安装包。
RUN python -m pip install --upgrade pip
WORKDIR /home/myuser
COPY --chown=myuser:myuser . ./mypackage
RUN pip install /home/myuser/mypackage && rm -rf /home/myuser/mypackage

通过以上方法,可以在Docker镜像中创建一个名为myuser的用户,并正确设置文件权限。这样,在COPY命令中复制文件时,文件将属于myuser用户和myuser组。这解决了文件权限问题,确保用户在Docker容器中具有适当的文件访问权限。

0