docker-compose.yml
考虑我的文件中设置卷安装(使用版本 3.7)的以下 YAML 代码,使用简写语法如文档中所述:
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 Desktop。
答案1
这实际上是旧-v
语法的一个“特性”(错误),他们不想修复它,因为它会破坏人们创建的依赖该行为的数千(数百万?)个实现。
为 Docker Swarm 引入的较新的--mount
卷语法,然后扩展为与原始 Docker CLI 调用兼容,明确没有重新引入此功能,因为它是“意外的魔法”,没有真正记录下来并且不应该依赖它。