为什么 docker-compose 在一种语法中创建源目录,而在另一种语法中却不创建?

为什么 docker-compose 在一种语法中创建源目录,而在另一种语法中却不创建?

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 调用兼容,明确没有重新引入此功能,因为它是“意外的魔法”,没有真正记录下来并且不应该依赖它。

相关内容