如何使用自定义名称构建 Dockerfile

How to build Dockerfile with custom names

我正在尝试自动构建 Docker 图像。假设在一个目录中,有几个 Dockerfile 个文件。其中一些被命名为 Dockerfile.testDockerfile_node,因为在一个目录中有多个文件,它们不能全部命名为 Dockerfile.

我有一个简单的脚本可以找到所有这些文件并需要调用 docker 构建。

这是我用来定位所有 Docker 文件的命令。

list=$(find . -name "Dockerfile*")

我得到以下列表:

./Dockerfile1
./testing/Dockerfile
./testing/Dockerfile_kubernetes

为了获取上下文,我需要找到包含 Dockerfile 个文件的目录。

files=$(find . -name "Dockerfile*" -exec dirname {} \;)

对于每个 Docker 文件,我调用 docker build。像这样...

for x in $files; do docker build $x; done;

我无法执行 docker build,因为出现以下错误。

unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/ubuntu/repo/Dockerfile: no such file or directory

运行 docker build 命令只会构建在 ./testing/Dockerfile.

中定义的图像

我知道在一个目录中有多个 Dockerfile 文件并这样命名是不好的做法,但我不是做出这些决定的人。我只需要让它工作。

有没有办法构建这些 Docker 文件?

您需要将 docker 文件名传递给构建命令。

for x in $files; do docker build -f $x .; done;

By default the docker build command will look for a Dockerfile at the root of the build context. The -f, --file, option lets you specify the path to an alternative file to use instead

https://docs.docker.com/engine/reference/commandline/build/