【问题标题】:How to specify a file for environment variables for docker如何为 docker 指定环境变量的文件
【发布时间】:2019-04-29 05:28:04
【问题描述】:

我的代码中有一些我需要的环境变量。

当我开始构建 docker 容器时,我希望将这些环境变量烘焙到我的 docker 容器中。

我知道 dockerfile 指令 'ENV' 正是这样做的,我想知道是否有一种方法可以指向一个文件而不是将其写入 Dockerfile 中

【问题讨论】:

    标签: docker


    【解决方案1】:

    AFAIK,没有这种方法可以在使用 Dockerfile 的构建步骤中使用文件注入环境变量。然而,在大多数情况下,人们最终会使用entrypoint 脚本并在docker rundocker-compose up 期间注入变量。

    如果有必要,您可能需要编写一个 shell 包装器,该包装器将通过将键值对文本文件作为输入来动态更改 Dockerfile 中的值,或者将其设置为如下所示但 ENV 文件名需要按照@thaJeztah 在link 中的建议包含在Dockerfile 中 -

    COPY my-env-vars /    
    RUN export $(cat my-env-vars | xargs)
    

    这是一个悬而未决的问题 - https://github.com/moby/moby/issues/28617

    【讨论】:

    • 这是一个巧妙的技巧。我现在就这样做
    • 是的,消除了在 Dockerfile 中单独管理变量的许多痛苦。天哪,它有帮助!
    • @vivekyad4v 环境变量很有用,因此同一个容器可以在不同的环境中运行,而无需重新构建它们。使用您的“hack”来消除这种可移植性,并在图像中对值进行硬编码。您还可以通过仅调查图像来公开环境变量值以供所有人查看。
    • @Mihai - 由于这是一个 hack,我们不希望它是完美的。我已经清楚地提到了利弊(ENV文件名需要包含在Dockerfile中)。如果您可以访问 docker,则可以轻松获取容器/图像等中的环境变量,无论它是如何注入的。如果您能分享一个更好的 hack 或完整的解决方案,那就太好了。
    • @vivekyad4v 我确实发布了我的解决方案 :) 另外我不是“黑客”的忠实粉丝,所以我不会发布一个。同样,我并不反对您的解决方案,但我确实认为您应该让用户了解此解决方案造成的问题,而我在您的帖子中没有看到这些问题。此外,我认为您不理解我的评论:docker 图像最终出现在公共存储库中。容器不会。因此任何有权访问注册表的人都可以检查图像。要检查容器,您需要的远不止这些(首先访问主机)。因此,图像和容器及其之间存在很大差异安全问题。
    【解决方案2】:

    在构建时,ENV 变量不可用。您需要使用 ARG 变量。为此,您拥有“docker build”的“--build-arg”标志。它不接受你的文件。

    ENV 变量由正在运行的容器使用,可以使用“docker run”的“--env-file”标志作为文件注入。

    希望这就是您要找的,否则请告诉我更多详细信息。

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2013-03-23
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多