
Considere o seguinte código YAML em meu docker-compose.yml
arquivo 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 logging
na minha máquina host para a /var/log/cron
pasta dentro do contêiner. Quando executo docker-compose up
, se a logging
pasta 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 logging
uma 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 -v
sintaxe 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 --mount
sintaxe 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 .