Docker Compose-Compartir volumen con nombre entre varios contenedores
Estoy usando docker-compose y v3. Estoy tratando de montar un volumen en docker:
./appdata:/appdata
Me gustaría tener esto como un volumen y luego hacer referencia a ese volumen de múltiples contenedores. La referencia de configuración del volumen solo muestra data-volume:
como un volumen con nombre, sin valor, por lo que no se parece al anterior.
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
Esto me da:
ERROR: En el archivo './ docker-compose.yml', volume 'app-volume' debe ser una asignación cadena.
Obviamente sé que necesito cambiar el par clave/valor volumes
, pero no estoy seguro cómo cambiar esto para poder compartir un volumen entre servicios.
También he comprobado volumes_from
pero esto efectivamente solo permite la herencia de otros contenedores. He visto a alguien usar volumes_from
en otro contenedor que contiene la asignación que quieren, pero con command: true
configurado para que el contenedor nunca se ejecute realmente, lo que a mí me parece un truco.
¿Cómo puedo hacer ¿esto?
Nota, yo hago tengo el siguiente trabajo:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Pero eso es solo duplicación y es algo que espero que un volumen con nombre pueda ayudarme a evitar : -)
2 answers
Los volúmenes nombrados se pueden compartir entre contenedores de la siguiente manera
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume: location_in_the_container
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume: location_in_the_container
volumes:
app-volume:
He aquí un ejemplo de configuración que uso para una mejor comprensión. Estoy exponiendo los archivos estáticos generados desde mi contenedor web
a un volumen llamado static-content
que luego es leído y servido por el contenedor nginx
services:
nginx:
container_name: nginx
build: ./nginx/
volumes:
- static-content:/usr/src/app
web:
container_name: web
env_file: .env
volumes:
- static-content:/usr/src/app/public
environment:
- NODE_ENV=production
command: npm run package
volumes:
static-content:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 12:42:10
Esto lo resuelve sin usar volúmenes nombrados:
volumes:
- ./appdata:/appdata
Por lo tanto, se ve como:
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- ./appdata:/appdata
php:
build: ./php/
expose:
- 9000
volumes:
- ./appdata:/appdata
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-31 12:28:24