4

我想创建能够构建三个不同图像(目前一个)的 Dockerfile。这些图像仅在配置文件中有所不同。

我在尝试:

  • 创建三个不同的 docker 文件(不起作用,因为 dockerfile 需要命名为 Dockerfile 并位于上下文根目录中
  • 找到一种将参数传递给 docker build 命令的方法 - 没有找到
  • 使用 ONBUILD 命令 - 我创建了一个主文件和三个特定的文件,它们将特定的 conf 文件复制到图像中的同一目录中(由于与第一点相同的原因,它不起作用)
  • 从标准输入传递 docker 文件 - 它不起作用,因为没有上下文(所以我不能使用 ADD/COPY 命令)

我必须说我的想法已经用完了:/你如何处理这种情况。在我看来,这应该是一个普遍的问题。

4

3 回答 3

5

为什么不在 Dockerfile 中复制所有 3 个配置文件,然后docker run -e config=file1(或 file2 或 file3)并使用配置环境变量的值来获取所需的配置文件。检查文档 http://docs.docker.com/reference/commandline /cli/#运行

您也可以使用--env-file=[] Read in a line delimited file of environment variablesdocker run命令。

您可以检查环境变量是否可用于 docker run -it -e mytag=abc123 ubuntu:latest env | grep mytag节目 mytag=abc123

于 2015-01-27T11:36:23.520 回答
0

如果您想要 3 个不同的图像,请使用 3 个不同的 Dockerfile。命名问题很烦人,但您可以编写一个帮助脚本来简单地复制文件并调用,docker build例如

cp Dockerfile-cfg1 Dockerfile
docker build -t "cfg1" .
cp Dockerfile-cfg2 Dockerfile
docker build -t "cfg2" .

但是,正如@user2915097 所建议的那样,更好的解决方案可能是拥有一个图像并在运行时选择配置。这意味着照顾和维护多个图像的开销更少。

于 2015-01-27T11:47:06.520 回答
0

我添加了三个不同的文件:

test.Dockerfile
dev.Dockerfile
prod.Dockerfile

我已经使用文件名运行它们:

docker build -t name/name -f test.Dockerfile .
docker build -t name/name -f dev.Dockerfile .
docker build -t name/name -f prod.Dockerfile .
于 2020-10-08T19:54:55.990 回答