Reputation: 16832
Question: Why do I get this error?
ERROR: In file './docker-compose.yml', volume 'mariavolume' must be a mapping not a string.
My docker-compose file is almost identical to this one: https://docs.docker.com/compose/wordpress/
version: '2'
services:
wordpress:
image: wordpress:latest
restart: always
depends_on:
- db
ports:
- 8080:80
environment:
WORDPRESS_DB_PASSWORD: example
WORDPRESS_DB_HOST: 3306
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume: ~/mariadb
Upvotes: 41
Views: 87202
Reputation: 581
try this, it works for me
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume:
drive: local
Upvotes: 1
Reputation: 16025
correct syntax for volume is
volumes:
first:
where first is just a placeholder name to be used for volume
Upvotes: 2
Reputation: 3147
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/mysql
volumes:
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/mysql
volumes:
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.
Upvotes: 11
Reputation: 6460
Try this:
version: '2'
services:
...
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- ~/mariadb:/var/lib/mysql
Upvotes: 1
Reputation: 10524
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.
Upvotes: 23
Reputation: 1769
For me this works:
In #docker_compose.yml:
volumes:
postgres_data: {}
static: { }
Upvotes: -1
Reputation: 956
try this:
volumes:
- maria_volume: /var/lib/mysql
volumes:
maria_volume:
external:
name: ~/mariadb
Upvotes: 5
Reputation: 1062
Unfortunately, there is no such a feature.
You can’t map a top-level volume in docker-compose.
Here are the options:
Create a volume outside of the compose (with mapping) and use it in your compose.
volumes:
maria_volume:
external:
name: volume-name
Upvotes: 11
Reputation: 1282
I was running into the same issue as yourself and as a last act of despair I tried putting
volumes:
- maria_volume: /var/lib/mysql
before
environment:
MYSQL_ROOT_PASSWORD: example
I'm not sure what kind of magic applied here but in my case, it worked
Let me know!
Upvotes: 0