Search code examples
dockerdocker-compose

After upgrade to 2.x, how do I get docker-compose to merge my files?


Under docker-compose 1.x, the following two files merged correctly using this command: docker-compose -f docker-compose.yml -f docker-compose.build.yml up

docker-compose.yml:

version: '2'
services:

  base:
    build:
      context: .
    entrypoint:
      - /bin/with-config
    ports:
      - "8080:8080"
    tty: true

  service:
    command:
      - /bin/start -d
    extends: base

  test:
    command:
      - npm
      - test
    extends: base

docker-compose.build.yml:

version: '2'

services:

  service-prebuilt:
    extends: service
    build: $CP_BUILD_FORCE_NO_BUILD_CONTEXT
    image: $CP_BUILD_BFF_IMAGE

  test-prebuilt:
    extends: test
    build: $CP_BUILD_FORCE_NO_BUILD_CONTEXT
    image: $CP_BUILD_BFF_IMAGE

However, using docker compose 2.x, I am getting the following error:

cannot extend service "service-prebuilt" in /Users/[me]/bff/docker-compose.build.yml: service not found

Solution

  • The extends option lets you specify a filename:

    services:
    
      service-prebuilt:
        extends:
          file: docker-compose.yml
          service: service
        build: $CP_BUILD_FORCE_NO_BUILD_CONTEXT
        image: $CP_BUILD_BFF_IMAGE
    
      test-prebuilt:
        extends:
          file: docker-compose.yml
          service: test
        build: $CP_BUILD_FORCE_NO_BUILD_CONTEXT
        image: $CP_BUILD_BFF_IMAGE
    

    Ref: https://docs.docker.com/reference/compose-file/services/#extends