¿Por qué docker-compose crea el directorio fuente en una sintaxis pero no en la otra?

¿Por qué docker-compose crea el directorio fuente en una sintaxis pero no en la otra?

Considere el siguiente código YAML en mi docker-compose.ymlarchivo 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 loggingen mi máquina host a la /var/log/croncarpeta dentro del contenedor. Cuando ejecuto docker-compose up, si la loggingcarpeta 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 logginguna 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 -vsintaxis 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 --mountsintaxis 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. .

información relacionada