Docker 非根用户的基本图像权限

Docker permissions with base image for non-root user

我有一个基本映像,它使用 root 权限执行几期安装,然后创建一个新用户,更改 WORKDIR 的所有者,然后切换到该用户。子图像将继承此图像 FROM 和 运行 作为用户的 Python 任务。

#base image

FROM scratch
WORKDIR /master

RUN adduser ...

RUN chown user:group -R .
USER user:group

这两个镜像会有不同的WORKDIR,其中子镜像的WORKDIR是基础镜像的子目录,在镜像构建时创建。

#child image

FROM base-image
WORKDIR /master/worker

...

RUN pip install -e .

构建子镜像时,最后一个pip命令出错,由于权限不足无法创建新文件

error: could not create 'python_project.egg-info': Permission denied

显然,基础镜像中的命令chown只授予用户对基础镜像WORKDIR的权限,不包括子镜像WORKDIR中新创建的子目录。

如果我在基础映像构建期间创建 master/worker 然后更改所有者,则子映像有效,因为用户现在是 /master/master/worker

的所有者
#base image

...

MKDIR worker
RUN chown user:group -R .
USER user:group

但我不想这样做,因为可能会有更多不同的 WORKDIR 从其他子图像创建。

有什么方法可以从基本映像(那里尚不存在)向子映像中的子目录授予权限? chown -R 标志在这种情况下不起作用。

我找到了解决方案,只需简单地创建子文件夹,然后在子图像

中将其设置为WORKDIR
RUN mkdir worker
WORKDIR /master/worker