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 volumespar clave / valor, pero no estoy seguro de cómo cambiar esto para poder compartir un volumen entre servicios.
También lo he comprobado, volumes_frompero esto efectivamente solo permite la herencia de otros contenedores. He visto a alguien usar volumes_fromen otro contenedor que contiene el mapeo que desea, pero con el command: trueconjunto 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
webcontenedor a un volumen con nombre llamadostatic-contentque luego es leído y servido por elnginxcontenedor:fuente
static_contenten el sistema de archivos del host?app-volume: location_in_the_containeres incorrecto./usr/src/appen elnginxcontenedor y/usr/src/app/publicen elwebcontenedor ambos tienen contenido original, cuál se usará y por qué?collectstaticen 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
volumescampo de nivel superior , parecen ser todavía algo en la versión 3 dedocker-compose.