首页 > 解决方案 > 如何将 Dockerfiles 中的一组 ENV 命令替换为可以重用的其他文件?

问题描述

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

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

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

标签: dockerenvironment-variablesdockerfile

解决方案


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

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),或者在您的应用程序代码中使用合理的默认值。


推荐阅读