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
我有一个基本映像,它使用 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