Docker Compose能否从同一文件夹中的不同Dockerfile构建镜像?

16

我的容器应该共享同一个源代码文件夹。

但它们应该使用不同的Dockerfile进行构建。

是否可以使用docker-compose同时从不同的Dockerfile构建它们?

我希望有一种类似于

build: . -f <<Dockerfile_ABC> build: . -f <<Dockerfile_CDE>

的语法。

abc:
  build: . -f <<Dockerfile_ABC>
  environment:
    - PROJECT=abc
  command: ruby abc/abc.rb
  volumes:
      - ./:/working_direcotry
  ports:
    - 5904:5904

cde:
  build: . -f <Dockerfile_CDE>
  environment:
    - PROJECT=cde
  command: ruby cde/cde.rb
  volumes:
      - ./:/working_direcotry
  ports:
    - 5902:5902

你可以直接在 Docker 的 GitHub 上提出拉取请求来分享你的想法。 - BMW
这是 https://dev59.com/-10a5IYBdhLWcg3w48FP 的可能重复。起初我误解了这个问题(忽略了docker-compose部分)并写了一个答案。现在我已经删除了那个答案,并发表了这个评论哈哈。 - Gobi Dasu
2个回答

26

以下方法适用于我:

abc:
  build:
    context: .
    dockerfile: Dockerfile.one
def:
  build:
    context: .
    dockerfile: Dockerfile.two
当然,如果你有不同的上下文需要调整,也可以进行微调。我也使用这个来创建单独的 Dockerfile.production 版本,以便为应用程序的生产版本设置不同的配置。

当然,如果您有不同的上下文需要调整,也可以进行微调。我还使用此方法创建单独的Dockerfile.production版本,以便对应用程序的生产版本进行不同的设置。


1
一个小技巧:在 vsCode 中,最好使用 one.dockerfile 而不是 Dockerfile.one - goFrendiAsgard

-1

只需指定 Dockerfile 的名称:

abc:
    build: path/to/Dockerfile_for_abc

2
我猜作者想要所有服务使用相同的构建上下文。一旦 Dockerfile 在不同的路径中,构建上下文也会改变到该路径。 - Torsten Engelbrecht
答案对你所指定的内容有些混淆,它不是“Dockerfile的名称”,而是一个完全不同的文件夹。如果将其指定为另一个Dockerfile的完整路径,则会导致错误:无法读取dockerfile:来自发送者的错误:..../Dockerfile_for_abc:不是目录 - Алексей Лещук

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接