
Considere el siguiente código YAML en mi docker-compose.yml
archivo que configura el montaje de volumen (usando la versión 3.7), usandosintaxis de forma cortacomo se especifica en los documentos:
volumes:
- ./logging:/var/log/cron
Esto asigna la ruta relativa logging
en mi máquina host a la /var/log/cron
carpeta dentro del contenedor. Cuando ejecuto docker-compose up
, si la logging
carpeta no existe en mi máquina host, Docker la crea. Todo bien ahí.
Ahora, si cambio lo anterior asintaxis de formato largo:
volumes:
- type: bind
source: ./logging
target: /var/log/cron
Ahora, cuando ejecuto docker-compose up
, NO crea logging
una carpeta si no existe en mi máquina host. yo obtengo
Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'
¿Alguien sabe por qué la sintaxis del formato corto crea la ruta del host si no existe, pero la sintaxis larga no existe y da un error?
Usando Docker Desktop para Windows.
Respuesta1
En realidad, esto era una "característica" (error) de la -v
sintaxis antigua que no querían arreglar porque rompería los miles (¿millones?) de implementaciones que la gente creó y que dependían de ese comportamiento.
La nueva --mount
sintaxis de volumen que se introdujo para Docker Swarm y luego se amplió para que fuera compatible con las llamadas originales de Docker CLI, no reintrodujo explícitamente esta funcionalidad porque era "magia inesperada" que no está realmente documentada y no debería haberse confiado en ella. .