【问题标题】:Is it redundant in a Dockfile to run USER root since you're already root?由于您已经是 root,因此在 Dockerfile 中运行 USER root 是否是多余的?
【发布时间】:2017-04-30 10:31:07
【问题描述】:

看着this Dockerfile,它的星号是:

FROM sequenceiq/pam:centos-6.5
MAINTAINER SequenceIQ

USER root

现在这似乎是多余的,因为默认情况下您已经是root。但是为了争论——让我们看看parent Dockerfile....这不会改变用户。

现在让我们看看祖父 Dockerfile。 (它似乎不可用)。

我的问题是:既然您已经是 root,那么在 Dockfile 中运行 USER root 是否是多余的?

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    是的,它是多余的,但保留这种冗余几乎没有任何不利之处。这样做可能是为了针对其他图像进行开发,或支持可能换出基本图像的用途。如果上游图像改变了它的行为,可以这样做以防止将来出现问题。或者他们可能只是想明确一点,所以很明显这个容器需要以 root 身份运行命令。

    【讨论】:

    • 这不是多余的。如果sequenceiq 图像以USER sequenceiq 结尾,则您不是root。如果有人导入您的 Dockerfile,它会从最后一个发布的 USER 开始。下面的两个答案都更接近事实。
    • @DanielW。如果您阅读了该问题,则 OP 明确指出父图像没有 USER 行。
    • 他在问“在 a Dockerfile ...”中,答案是“不,一般来说不是多余的”。我只是不得不为此烦恼,答案是 100% 不是“是”。
    • @DanielW。粗体字表示“因为您已经是 root”,并包括调试步骤和指向父 Dockerfile 的链接。听起来您正在寻找不同问题的答案。
    【解决方案2】:

    如果图像是从将 root 更改为用户的源生成的,您可能无法访问其中的所有资源。但是,如果您加载图像:

    FROM xxxxxx/xxxxxx:最新
    用户根

    这将为您提供对图像资源的 root 访问权限。我只是在被拒绝访问不属于我的现有图像中更改 /etc/apt/sources.list 后才使用它。它工作正常,让我更改sources.list

    【讨论】:

    • 这在我的大多数容器中实际上非常有用,因为我总是使用我没有生成的基本图像。如果您需要在弹性映像(ElasticSearch、Logstash 或 Kibana)中安装软件包,这是可行的方法。
    【解决方案3】:

    if you are already root, then it's redundant to use it.

    正如@BMitch 还指出的那样,您可以使用USER root 来确保如果父图像在即将发布的版本中更改用户等情况,您不会破坏事情。

    这实际上取决于图像。在某些镜像中,例如grafana/grafana,默认用户不是root,也没有sudo。因此,您必须将USER root 用于任何特权任务(例如,通过 apt 更新和安装应用程序)。

    【讨论】:

    • OP 已经验证父图像没有定义用户。
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2021-10-28
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2023-01-16
    • 2013-04-13
    相关资源
    最近更新 更多