Home > Net >  docker-compose: Compose file "..." is invalid because: unsupported config options
docker-compose: Compose file "..." is invalid because: unsupported config options

Time:03-14

I have recently pulled an official repository from docker consisting of docker-compose templates.

When I try to build and run nginx-golang-mysql/docker-compose.yml with docker-compose up -d I get the following error:

ERROR: The Compose file './docker-compose.yaml' is invalid because:
Unsupported config option for volumes: 'db-data'
Unsupported config option for secrets: 'db-password'
Unsupported config option for services: 'proxy'

This is my docker-compose.yml file (original available on github):

services:
  backend:
    build: backend
    secrets:
      - db-password
    depends_on:
      db:
        condition: service_healthy
  db:
    # We use a mariadb image which supports both amd64 & arm64 architecture
    image: mariadb:10.6.4-focal
    # If you really want to use MySQL, uncomment the following line
    #image: mysql:8.0.27
    command: '--default-authentication-plugin=mysql_native_password'
    restart: always
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 30s
    secrets:
      - db-password
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=example
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password
    expose:
      - 3306
  proxy:
    build: proxy
    ports:
      - 80:80
    depends_on: 
      - backend
volumes:
  db-data:
secrets:
  db-password:
    file: db/password.txt

These are my versions of docker and docker-compose:

Docker version 20.10.13, build a224086
docker-compose version 1.25.0, build unknown

Any idea why I'm getting these errors? The other compose-files throw a similar error when I try to run them. I'm using this version of Docker and docker-compose for other projects successfully on a daily basis.

CodePudding user response:

Compose file version 3 requires a version: label; see About versions and upgrading. You need to add this line, usually at the start of the file:

version: '3.8'

Absent this line, docker-compose interprets the file as a version 1 Compose file. This omits the top-level services: key and puts all services at the top level of the file, but it also does not support volumes: or networks:, and modern Docker networking doesn't work with a v1 Compose file.

An argument could be made that the newer Compose Specification makes version: optional. However, removing it makes the file incompatible with existing tooling, as you've seen in this question, and I would always include it.

CodePudding user response:

As per Zeitounator's comment:

The problem was I have installed docker-compose from apt and not from the official repository. The apt only had 1.25 version and I believed it was the latest. In fact the latest is 1.29 at the moment. After installing the latest version as shown in the official docs it now works.

The pip install --upgrade docker-compose didn't update it for me. I had to remove the version installed with apt and install it again from the official docker repo.

  • Related