Necesito hacer que un volumen con nombre use una ruta relativa a la carpeta donde se ejecuta el comando docker-compose .
Aquí está la definición de volumen en docker-compose.yml
volumes: esdata1: driver: local driver_opts: type: none device: ./esdata1 o: bindParece que docker-compose no crea la carpeta si no existe , pero incluso cuando la carpeta se crea antes de iniciar la ventana acoplable, siempre recibo este error:
ERROR: for esdata Cannot create container for service esdata: error while mounting volume with options: type='none' device='./esdata1' o='bind': no such file or directory NOTA: Esto puede ser una tontería, pero esdata es el servicio que usa el volumen con nombre
esdata: ... volumes: - esdata1:/usr/share/elasticsearch/data ...¿Qué me estoy perdiendo aquí?
Tal vez la ruta relativa ./ no apunte a la carpeta donde se ejecuta docker-compose (he intentado con ~/ usar una carpeta relativa a la casa del usuario pero obtuve el mismo error).
Gracias por adelantado,
PD: si uso una ruta absoluta, funciona a las mil maravillas
Encontré exactamente el mismo problema. Parece que no has hecho nada malo. Esto aún no está implementado en Docker: https://github.com/docker/compose/issues/6343
No es muy agradable para la portabilidad...
Si usa un montaje de vinculación con nombre como este, debe incluir la ruta completa al archivo, por ejemplo:
volumes: esdata1: driver: local driver_opts: type: none device: /home/username/project/esdata1 o: bindEsa carpeta también debe existir de antemano. Así es como funciona Linux bind mount syscall, y cuando pasa indicadores como este, está hablando directamente con Linux sin ninguna expansión de ruta por docker o compose.
Si solo desea montar el directorio desde el host, el uso de un volumen de host se expandirá para la ruta relativa al componer:
esdata: ... volumes: - ./esdata1:/usr/share/elasticsearch/data ...Si bien el volumen del host es más fácil para la portabilidad, ya que la ruta se expande automáticamente, perderá la función de los volúmenes con nombre donde la ventana acoplable inicializa un volumen con nombre vacío con el contenido de la imagen (incluidos los permisos/la propiedad del archivo).