看看this Dockerfile,它开始于:
FROM sequenceiq/pam:centos-6.5
MAINTAINER SequenceIQ
USER root
现在这看起来是多余的,因为默认情况下您已经是root
了。但是为了讨论的缘故-让我们看看parent Dockerfile....它不会改变用户。
现在让我们看看祖父Dockerfile。(似乎没有可用)。
我的问题是:在Dockfile中运行USER root是否多余,因为您已经是root用户?
看看this Dockerfile,它开始于:
FROM sequenceiq/pam:centos-6.5
MAINTAINER SequenceIQ
USER root
现在这看起来是多余的,因为默认情况下您已经是root
了。但是为了讨论的缘故-让我们看看parent Dockerfile....它不会改变用户。
现在让我们看看祖父Dockerfile。(似乎没有可用)。
我的问题是:在Dockfile中运行USER root是否多余,因为您已经是root用户?
3条答案
按热度按时间vatpfxk51#
是的,它是冗余的,但保留这种冗余几乎没有任何负面影响。这样做可能是为了针对其他映像进行开发,或者支持可能交换基础映像的使用。如果上游映像改变了它的行为,可以这样做以防止将来的问题。或者,他们可能只是想显式地这样做,很明显这个容器需要以root身份运行命令。
这假设您已经验证了基础映像正在以root身份运行(正如OP所做的那样)。对于其他有此问题的人,如果您运行:
并看到空字符串或
root
以外的任何内容,则需要USER root
来更改需要该访问权限的任务的用户(例如安装软件包、更改文件系统权限以及将文件写入不属于您的用户的文件夹中)。在执行这些步骤(在单独的RUN
行中)之后,请确保在发布的映像中使用另一个USER youruser
行更改回非特权用户。vxf3dgd42#
如果映像是从将root更改为用户的源生成的,则您可能无法访问其中的所有资源。但是,如果加载图像:
FROM xxxxxx/xxxxxx:最新
用户根
这将为您提供对图像资源的root访问权限。我只是在被拒绝访问更改/etc/apt/sources.list后使用了它,该列表在一个不是我的现有图像中。它工作得很好,让我改变了来源。列表
q8l4jmvw3#
if you are already root, then it's redundant to use it。
正如@BMitch还指出的那样,您可以使用
USER root
来确保如果父映像在即将到来的版本中更改了用户,则不会破坏其他内容。这实际上取决于图像。在某些映像(如
grafana/grafana
)中,默认用户不是root用户,因此没有sudo
。因此,您必须使用USER root
执行任何特权任务(例如,通过apt更新和安装应用程序)。