Con Docker Compose v1.6.0 +, ahora hay una nueva sintaxis de archivo / versión 2 para el docker-compose.ymlarchivo. Los cambios incluyen una clave de nivel superior separada llamada volumes. Esto permite "centralizar" las definiciones de volumen en un solo lugar.
Lo que estoy tratando de hacer es nombrar volúmenes allí y tener una ruta múltiple de referencia de volumen único en mi disco host local. El siguiente es un ejemplo, arrojando una excepción con un Tracebackque termina con
AttributeError: 'list' object has no attribute 'items'
Ejemplo docker-compose.yml:
version: '2'
services:
db:
image: postgres
volumes:
- database:/var/lib/postgres/data
php:
image: php-fpm:5.6
volumes:
- phpconf:/etc/php/conf.d
namedvolume:
container_name: namedvolume
build: ./Docker/Testvolume
volumes:
- ./Docker/Testvolume/shareme
volumes:
database:
- ./Docker/Postgres/db:ro
- ./Docker/Postgres/ini
phpconf:
- ./Docker/PHP-FPM/conf
singledir: ./Docker/foo
completemap: ./Docker/bar:/etc/service/conf.d
- namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
… ?
Hasta ahora, leí toda la referencia de configuración de Docker Compose docs master-branch Volume, Docker Compose docs Volume / Volume-Driver reference y busqué en los ejemplos de GitHub para encontrar la sintaxis correcta que se espera. Parece que nadie ya está usando eso (GitHub) y la documentación está lejos de estar completa (docker.com). También intenté construir un volumen separado servicey hacer referencia a él volumes, pero eso tampoco funciona. ¿Alguna idea de cómo se supone que debe ser esta sintaxis?
fuente

$(docker volume ls |awk '{print $2}')que pueda usar$(docker volume ls -q)No solo es esto más simple, no imprime "VOLUMEN" en la primera línea.volumes_fromes heredar la lista de volúmenes de otro contenedor. Para usar un volumen con nombre, usa la sintaxis de nivel de servicio- NAME:DESTy establece la ruta en lavolumesclave de nivel superior . Lo que hace este ejemplo (al momento de escribir esto) es hacer un volumen estándar además de un volumen con nombre, y el volumen con nombre simplemente no se usa.Según tengo entendido, puede usar la
volumes:sección global paraLos volúmenes en la sección global se crearán automáticamente a menos que usted especifique
external: true. Aún tendrá que decirle a cada servicio en suvolumes:sección dónde montar ese volumen.Aquí hay un ejemplo muy simple:
La
volumes:entrada global paraprojectharáprojectque se cree un volumen con nombre . Luego se monta como/baren el servicio uno y como/fooen el servicio dos. Ambos servicios comparten los datos del volumen y pueden leerlo / escribirlo.No creo que lo que intentas hacer sea posible (convertir múltiples rutas en un solo volumen y con diferentes r / w flags). Si es posible, entonces probablemente encontrando una manera de crear un volumen con nombre con estas propiedades a través de otros medios y luego agregándolo como un volumen externo:
fuente
projecty luego hacer referencia a élproject:/bar, ¿dónde estánprojectrealmente definidas las rutas?project:alias? ¿Cómo sabe Docker si quiero compartir, digamos./some_folder/some_subfolder/yet_another_subfoldera los contenedoresone:ytwo:?Consulte la Versión 2, por ejemplo, también la referencia de configuración de Volumen :
Mi ejemplo: (Versión 1)
fuente
Version 2sección del documento)volumestecla de nivel superior por separado , lo cual no hice, de ahí la pregunta. Lo que no entiendo es lo que ladocker-compose.ymlparte con la sintaxis de la versión 1 está destinada a explicarme.Creo que lo que intentas hacer es más o menos lo mismo que se ve aquí . En resumen: actualmente no es posible crear un volumen con nombre que se refiera a un punto de montaje en el host. Puede crear un volumen con nombre para compartir datos entre contenedores, pero los datos solo existirán en el volumen mismo y desaparecerán cuando elimine el volumen.
Se ha propuesto el montaje de volúmenes con nombre , pero desafortunadamente no se agregará al núcleo en un futuro próximo. Sin embargo, es posible mediante el uso de un complemento docker llamado local-persist .
fuente