I'm using docker-compose and v3. I'm trying to mount a volume in docker:
./appdata:/appdata
I'd like to have this as a volume and then reference that volume from multiple containers. The volume configuration reference only shows data-volume:
as a named volume, with no value, so it doesn't look like the above.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
This gives me:
ERROR: In file './docker-compose.yml', volume 'app-volume' must be a mapping not a string.
Obviously I know I need to change the volumes
key/value pair, but I'm not sure how to change this so I can share a volume between services.
I've also checked out volumes_from
but this effectively just allows inheritance from other containers. I've seen someone use volumes_from
on another container that contains the mapping they want, but with command: true
set so that the container is never actually run, which to me just seems like a hack.
How can I do this?
Note, I do have the following working:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
But that's just duplication and is something I'm hoping a named volume could help me avoid :-)
This solves it without using named volumes:
So, it looks like:
The named volumes can be shared across containers in the following way
heres an example config that i use for better understanding. I'm exposing the static files generated from my
web
container to a named volume calledstatic-content
which is then read and served by thenginx
container