【问题标题】:How can I replace a set of ENV commands in Dockerfiles with placing them to some other file, which can be reused?如何将 Dockerfile 中的一组 ENV 命令替换为可以重用的其他文件?
【发布时间】:2023-04-05 18:08:01
【问题描述】:

我有两个带有环境变量列表的 Dockerfile(可能会有更多),这两个文件都相同。比方说:

ENV VAR1="value1"
ENV VAR2="value2"
ENV VAR3="value3"

我能否以某种方式将此设置移动到一个文件中,该文件可以在所有需要的 Dockerfile 中使用? 我想删除重复项并有一个共同的地方来设置这些变量。

【问题讨论】:

标签: docker environment-variables dockerfile


【解决方案1】:

您可以将它们拆分为自定义基础图像。该图像看起来像

FROM ubuntu:18.04 # or whatever else you're using
ENV VAR1="value1"
ENV VAR2="value2"
ENV VAR3="value3"
# and that's all

在大多数情况下,您必须手动构建它

docker build -t my/env-base -f Dockerfile.env .

然后你可以在下游的Dockerfiles中引用它

FROM my/env-base
# the rest of the Dockerfile commands as normal

像 Docker Compose 这样的工具不会真正意识到这种图像分层。没有好的方法可以列出需要构建为其他事物的依赖项的基础镜像,但不应该单独运行容器。如果您确实更改了这些值,则必须手动重新构建基础映像,然后重新构建应用程序映像。

您还应该考虑是否需要所有这些环境变量。在其他 SO 问题中,我看到用于文件系统路径的变量(可以在隔离的 Docker 映像中修复)、用户名(实际上不是 Docker 概念)、凭据(远离映像,很容易将它们取出) 、版本和 URL。您也许可以不使用这些固定值(使用 /app 而不是 $INSTALL_PATH),或者在您的应用程序代码中设置合理的默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2011-03-30
    • 2022-10-09
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多