ERROR: In file './docker-compose.yml', volume must be a mapping not a string ERROR: In file './docker-compose.yml', volume must be a mapping not a string wordpress wordpress

ERROR: In file './docker-compose.yml', volume must be a mapping not a string


In my case this was happening because I missed adding a : after the volume name.

Instead of:

volumes:    - mysqldata:

I had typed:

volumes:    - mysqldata

docker-compose up gave me the same error as above.


Unfortunately, there is no such a feature.

You can’t map a top-level volume in docker-compose.

Here are the options:

  • Adding volume per container and map it there. (like what Daniel did here)
  • Create a volume outside of the compose (with mapping) and use it in your compose.

    volumes:   maria_volume:        external:           name: volume-name


I've just tackled this issue myself. If you just want a volume to store data, then do as below. This will create/reuse a volume that is persisted to disk as part of the Docker graph driver.

The next question is where is this?.

You can find it inside the docker image - Default Location -

C:\Users\Public\Documents\Hyper-V\Virtual hard disks

db:  image: mariadb  restart: always  environment:    MYSQL_ROOT_PASSWORD: example  volumes:    - maria_volume: /var/lib/mysqlvolumes:  maria_volume:

Of course, if you are after mapping a host directory into docker rather than having it inside the Docker graph driver. Then you can do it as follows.

db:  image: mariadb  restart: always  environment:    MYSQL_ROOT_PASSWORD: example  volumes:    - maria_volume: /var/lib/mysqlvolumes:  maria_volume:    driver: local    driver_opts:      o: bind      type: none      device: /C/mariadb

Please note, when mapping over host directories as volume (at least on windows) you can have issues with read/write permissions, something I have yet to resolve myself.