docker 在Dockfile中运行USER root是否多余,因为您已经是root用户了?

vkc1a9a2  于 2023-05-16  发布在  Docker
关注(0)|答案(3)|浏览(447)

看看this Dockerfile,它开始于:

FROM sequenceiq/pam:centos-6.5
MAINTAINER SequenceIQ

USER root

现在这看起来是多余的,因为默认情况下您已经是root了。但是为了讨论的缘故-让我们看看parent Dockerfile....它不会改变用户。
现在让我们看看祖父Dockerfile。(似乎没有可用)。
我的问题是:在Dockfile中运行USER root是否多余,因为您已经是root用户?

vatpfxk5

vatpfxk51#

是的,它是冗余的,但保留这种冗余几乎没有任何负面影响。这样做可能是为了针对其他映像进行开发,或者支持可能交换基础映像的使用。如果上游映像改变了它的行为,可以这样做以防止将来的问题。或者,他们可能只是想显式地这样做,很明显这个容器需要以root身份运行命令。
这假设您已经验证了基础映像正在以root身份运行(正如OP所做的那样)。对于其他有此问题的人,如果您运行:

docker image inspect --format '{{.Config.User}}' $base_image_name

并看到空字符串或root以外的任何内容,则需要USER root来更改需要该访问权限的任务的用户(例如安装软件包、更改文件系统权限以及将文件写入不属于您的用户的文件夹中)。在执行这些步骤(在单独的RUN行中)之后,请确保在发布的映像中使用另一个USER youruser行更改回非特权用户。

vxf3dgd4

vxf3dgd42#

如果映像是从将root更改为用户的源生成的,则您可能无法访问其中的所有资源。但是,如果加载图像:
FROM xxxxxx/xxxxxx:最新
用户根
这将为您提供对图像资源的root访问权限。我只是在被拒绝访问更改/etc/apt/sources.list后使用了它,该列表在一个不是我的现有图像中。它工作得很好,让我改变了来源。列表

q8l4jmvw

q8l4jmvw3#

if you are already root, then it's redundant to use it
正如@BMitch还指出的那样,您可以使用USER root来确保如果父映像在即将到来的版本中更改了用户,则不会破坏其他内容。
这实际上取决于图像。在某些映像(如grafana/grafana)中,默认用户不是root用户,因此没有sudo。因此,您必须使用USER root执行任何特权任务(例如,通过apt更新和安装应用程序)。

相关问题