从多个dockerfile生成多个映像

从多个dockerfile生成多个映像,docker,docker-compose,Docker,Docker Compose,有没有办法通过管理两个不同的DockerFile来构建多个映像? 在我的例子中,我想在构建上下文中保留两个dockerfile假设dockerfile_app1 dockerfile_app2 docker build -t <image_name> . 这也不适用于我的案例,因为它希望文件名为Dockerfile. 我也尝试过由docker编写构建。但是它不起作用 app1: build: Dockerfile_app1 ports: - "80:80" app2:

有没有办法通过管理两个不同的DockerFile来构建多个映像? 在我的例子中,我想在构建上下文中保留两个dockerfile假设dockerfile_app1 dockerfile_app2

docker build -t <image_name> .
这也不适用于我的案例,因为它希望文件名为
Dockerfile.

我也尝试过由docker编写构建。但是它不起作用

app1:
  build: Dockerfile_app1
  ports:
   - "80:80"
app2:
  build: Dockerfile_app2
  ports:
   - "80:80"

只需将
-f
参数用于
docker build
即可指定要使用的Dockerfile的名称:

$ docker build -t <image_name> -f Dockerfile_app1 .
...

请注意,
build
键用于生成上下文,而不是Dockerfile的名称(因此在您的示例中,它查找名为
Dockerfile\u app1
的目录)。

docker compose.yml中的
build
指令需要一个目录,而不是文件名。
docker build
命令允许您指定除
Dockerfile
以外的名称;检查手册页或帮助输出(并确保您正在运行最新的Docker版本)。谢谢Adrian,如果我使用Docker build-t-f Dockerfile_app1选项,它会正常工作。但是,如果我试图使用docker compose build构建app2服务,我会收到“不支持的配置选项:'dockerfile'”消息。我做错什么了吗?你用的是什么版本的Compose?您可能只需要升级
dockerfile
应该是正确的:我的1.2.0不工作,在更新到1.3.1之后,它对我来说工作得很好,谢谢:)
dockerfile
应该是
args
context
中的一个属性,请参阅。您能更新答案中的缩进吗?@peetasan取决于您使用的是新的还是旧的撰写语法:(
$ docker build -t <image_name> -f Dockerfile_app1 .
...
app1:
  build: .
  dockerfile: Dockerfile_app1
  ports:
   - "80:80"
app2:
  build: .
  dockerfile: Dockerfile_app2
  ports:
   - "80:80"