Estoy usando docker-compose y v3. Estoy intentando montar un volumen en la ventana acoplable:
./appdata:/appdata
Me gustaría tener esto como un volumen y luego hacer referencia a ese volumen desde varios contenedores. La referencia de configuración del volumen solo se 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', el volumen 'app-volume' debe ser una asignación, no una cadena.
Obviamente, sé que necesito cambiar el volumes
par clave / valor, pero no estoy seguro de cómo cambiar esto para poder compartir un volumen entre servicios.
También lo 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 el mapeo que desea, pero con el command: true
conjunto para que el contenedor nunca se ejecute realmente, lo que a mí me parece un truco.
¿Cómo puedo hacer esto?
Tenga en cuenta, que no tienen el siguiente trabajo:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Pero eso es solo una duplicación y es algo que espero que un volumen con nombre pueda ayudarme a evitar :-)
fuente
Respuestas:
Los volúmenes nombrados se pueden compartir entre contenedores de la siguiente manera:
Aquí hay una configuración de ejemplo que utilizo para una mejor comprensión. Estoy exponiendo los archivos estáticos generados desde mi
web
contenedor a un volumen con nombre llamadostatic-content
que luego es leído y servido por elnginx
contenedor:fuente
static_content
en el sistema de archivos del host?app-volume: location_in_the_container
es incorrecto./usr/src/app
en elnginx
contenedor y/usr/src/app/public
en elweb
contenedor ambos tienen contenido original, cuál se usará y por qué?collectstatic
en un contenedor y desea que los resultados estén disponibles en otro, pero no le importa la carpeta del hostEsto lo resuelve sin usar volúmenes con nombre:
Entonces, se ve así:
fuente
./appdata
, eso es lo que estoy tratando de hacer. Sin embargo, deje esta respuesta aquí :) +1Los volúmenes con nombre de la ventana acoplable se eliminaron a partir de la versión docker-compose 3.
Sin embargo, puede usar campos de extensión para evitar la duplicación de la fuente de los volúmenes y evitar futuros errores tipográficos:
NOTA: Esa función está disponible a partir del formato de archivo de la versión 3.4.
fuente
volumes
campo de nivel superior , parecen ser todavía algo en la versión 3 dedocker-compose
.