Por que o docker-compose cria o diretório de origem em uma sintaxe, mas não na outra?

Por que o docker-compose cria o diretório de origem em uma sintaxe, mas não na outra?

Considere o seguinte código YAML em meu docker-compose.ymlarquivo que configura a montagem de volume (usando a versão 3.7), usandosintaxe de formato curtoconforme especificado nos documentos:

volumes:
    - ./logging:/var/log/cron

Isso mapeia o caminho relativo loggingna minha máquina host para a /var/log/cronpasta dentro do contêiner. Quando executo docker-compose up, se a loggingpasta não existir na minha máquina host, o Docker a cria. Tudo bem aí.

Agora, se eu mudar o acima parasintaxe de formato longo:

volumes:
    - type: bind
      source: ./logging
      target: /var/log/cron

Agora, quando executo docker-compose up, ele NÃO cria logginguma pasta se ela não existir na minha máquina host. eu recebo

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'

Alguém sabe por que a sintaxe abreviada cria o caminho do host se ele não existe, mas o formato longo não existe e gera um erro?

Usando Docker Desktop para Windows.

Responder1

Na verdade, esse era um "recurso" (bug) da -vsintaxe antiga que eles não queriam consertar porque quebraria todos os milhares (milhões?) De implementações que as pessoas criaram que dependiam desse comportamento.

A --mountsintaxe de volume mais recente que foi introduzida para o Docker Swarm e depois estendida para ser compatível com as chamadas CLI do Docker originais, explicitamente não reintroduziu essa funcionalidade porque era uma "mágica inesperada" que não está realmente documentada e não deveria ser confiável .

informação relacionada