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

zur*_*fyx 6 docker docker-compose

拥有docker-compose.yml如下基础:

version: '2'
services:
  web:
    build: .
...
Run Code Online (Sandbox Code Playgroud)

如何将其扩展为使用图像?

docker-compose.prod.yml

version: '2'
services:
  web:
    image: username/repo:tag
Run Code Online (Sandbox Code Playgroud)

使用docker-compose -f docker-compose.yml -f docker-compose.prod.yml updocker 运行它仍会提示:

构建Web
步骤1/x:FROM ...

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

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

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

zur*_*fyx 5

省略build底座docker-compose.yml,并将其放在一个docker-compose.override.yml文件中.

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

Docker Compose文档中提取.

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

version: '2'
services:
  web:
    image: repo
[...]
Run Code Online (Sandbox Code Playgroud)

现在,让我们移动到docker-compose.override.yml,将默认(意思是运行一个docker-compose updocker-compose run web command).

默认情况下,我们希望它从我们构建图像Dockerfile,因此我们可以通过使用它来完成build: .

version: '2'
services:
  web:
    build: .
Run Code Online (Sandbox Code Playgroud)

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

version: '2'
services:
  web:
    image: repo
Run Code Online (Sandbox Code Playgroud)

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