考虑我的文件中的以下 YAML 代码,它使用文档中指定的短格式语法docker-compose.yml
设置卷安装(使用版本 3.7) :
volumes:
- ./logging:/var/log/cron
logging
这会将我的主机上的相对路径映射到/var/log/cron
容器内的文件夹。当我运行时docker-compose up
,如果logging
我的主机上不存在该文件夹,Docker 会创建它。那里一切都好。
现在,如果我将上面的内容更改为长格式语法:
volumes:
- type: bind
source: ./logging
target: /var/log/cron
现在,当我运行时,如果它在我的主机上不存在docker-compose up
,它不会创建文件夹。logging
我明白了
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'
有谁知道为什么短格式语法不存在会创建主机路径,但长格式不存在并给出错误?
使用适用于 Windows 的 Docker 桌面。
这实际上是
-v
他们不想修复的旧语法的“功能”(错误),因为它会破坏人们创建的依赖于该行为的所有数千(数百万?)实现。为 Docker Swarm 引入的较新的
--mount
卷语法,然后扩展为与原始 Docker CLI 调用兼容,明确没有重新引入此功能,因为它是“意外的魔法”,没有真正记录在案,不应该被依赖.