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.