我试图找到一个通用的最佳实践如何:
FROM ...
),我已经搜索并尝试了好几天,但一直无法提出令人满意的解决方案。
我想提出一种方法,例如类似于以下内容,仅用于调整原始服务运行的用户:
FROM mariadb:10.3
RUN chgrp -R 0 /var/lib/mysql && \
chmod g=u /var/lib/mysql
USER 1234
但是,我一次又一次遇到的问题是,每当父Dockerfile 将某个路径声明为VOLUME
(在上面的示例中实际上是VOLUME /var/lib/mysql
)时,这实际上使子Dockerfile 无法调整该特定路径的文件权限。该chgrp
&chmod
是没有在这种情况下的效果,所以造成泊坞窗容器将无法成功启动,由于文件访问权限问题。
我知道该VOLUME
指令的设计方式以及为什么会这样,但在我看来,它似乎完全阻止了给定问题的简单解决方案:采用 Dockerfile 并以简单、干净和简约的方式调整它以运行作为非根而不是根。
背景是:我正在尝试在 Openshift 集群上运行任意 Docker 镜像。默认情况下,Openshift 会阻止以 root 身份运行容器,我想保持这种方式,因为它看起来很理智,并且在安全方面朝着正确的方向迈出了一步。
这意味着像 那样的解决方案gosu
,期望容器以 root 身份启动以便在运行时删除特权在这里是不够的。我想要一种方法,它根本不需要容器以 root 身份启动,而只需要指定的USER
甚至是随机的 UID。
到目前为止,我发现的令人不满意的方法是:
sed
/awk
在构建期间通过所有服务的配置文件将原始VOLUME
路径替换为备用路径,以便chgrp
和chmod
可以工作(保留原始VOLUME
路径孤立)。我真的不喜欢这些方法,因为它们需要真正深入研究父Dockerfile的逻辑和基础架构以及服务本身的运行方式。
所以一定有更好的方法来做到这一点,对吧?我错过了什么?非常感谢帮助。
卷挂载点的权限根本无关紧要,挂载覆盖了所有底层权限。此外,您可以在 Kubernetes 级别设置此类内容,而根本不必担心 Dockerfile。这通常是一个 PodSecurityPolicy,但您也可以在 pod 本身的 SecurityContext 中设置它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句