Docker编写如何使用build扩展服务以使用图像

时间:2017-02-11 17:48:19

标签: docker docker-compose

拥有如下所示的基础docker-compose.yml

version: '2'
services:
  web:
    build: .
...

如何扩展它以使用图像?

docker-compose.prod.yml

version: '2'
services:
  web:
    image: username/repo:tag

使用泊坞窗docker-compose -f docker-compose.yml -f docker-compose.prod.yml up运行它仍会提示:

  

建立网站
  第1步/第x步:从......

我尝试了docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --no-build

  

错误:需要构建服务'web',但是--no-build已通过。

我期待“从名称/回购消息中拉出来”。我有哪些选择?或者我是否需要创建一个完整的重复文件来处理这种轻微的修改?

1 个答案:

答案 0 :(得分:5)

忽略基础build上的docker-compose.yml,并将其放在docker-compose.override.yml文件中。

  

当你运行docker-compose时,它会自动读取覆盖。

摘自Docker Compose Documentation

由于 docker-compose.yml 文件必须包含构建或图片,因此我们会使用优先级较低的图片,从而导致:

version: '2'
services:
  web:
    image: repo
[...]

现在让我们转到 docker-compose.override.yml ,即默认运行的那个(意为docker-compose updocker-compose run web command)。

默认情况下,我们希望它从Dockerfile构建图片,因此我们只需使用build: .

即可
version: '2'
services:
  web:
    build: .

使用docker-compose.prod.yml运行的生成 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up 将与此类似,除了在这种情况下我们希望它从Docker存储库中获取图像:

version: '2'
services:
  web:
    image: repo

由于我们的基本image: repo文件已经有docker-compose.yml,因此我们可以在此处省略它(但这完全是可选的)。