docker-compose.yml 覆盖删除镜像的构建

Aug*_*ger 7 docker docker-compose

我有:

docker-compose.yml:

services:
  app:
    build: .
Run Code Online (Sandbox Code Playgroud)

docker-compose.override.yml

services:
  app:
    image: my_repo/my_app:my_tag
Run Code Online (Sandbox Code Playgroud)

当我这样做时docker-compose up,它实际上是这样做的build: .,而不是使用重写image: my_repo/my_app:my_tag

我想我应该选择某种build: falseorbuild: none确保它读取image属性,不是吗?由于覆盖看起来就像合并,因此结果就像两个条目都在那里一样:

services:
  app:
    build: .
    image: my_repo/my_app:my_tag
Run Code Online (Sandbox Code Playgroud)

似乎build是优先的image(来自文档)。

小智 2

我能够build使用 . 从渲染的配置中删除该部分!reset null

以这两个文件为例:

docker-compose.yml

services:
  backend:
    build:
      context: .
      dockerfile: backend/docker/Dockerfile
Run Code Online (Sandbox Code Playgroud)

docker-compose.dev.yml

services:
  backend:
    image: my/dev/image:0.9
    build: !reset null
Run Code Online (Sandbox Code Playgroud)

使用 查看渲染的配置时docker compose -f docker-compose.yml -f docker-compose.dev.yml config,结果如下:

name: test
services:
  backend:
    image: my/dev/image:0.9
    networks:
      default: null
networks:
  default:
    name: test_default
Run Code Online (Sandbox Code Playgroud)

这在使用时也有效docker-compose.override.yml(即不手动指定多个撰写文件时)

文档中也提到了这一点:https ://docs.docker.com/compose/compose-file/13-merge/

使用 compose 版本 2.18.1 进行测试。