为什么在 docker-compose 中我应该写入卷的完整路径?

Why in docker-compose I should write full path to volume?

我对 docker-compose 卷(在 docker windows 服务器(容器)中)有一些困惑。 我写了下配置

volumes:
  - "C:/ProgramData/Docker/volumes/admin-stat-logs:C:/app/Logs"

以及为什么有必要写入卷的完整路径?

如果我写:

volumes:
  - "admin-logs:C:/app/Logs"

它产生错误 错误:命名卷 "admin-logs:C:/app/Logs:rw" 用于服务 "admin-stat-table",但在卷部分未找到声明。

为什么会这样?

更新

让我说明一下我的意思(我解释错了)。在一张图片中,我们有来自官方文档的简短公告。

我的情况也是这样写的:

volumes:
  - admin-logs:C:/app/Logs

我之前通过终端创建卷。当我开始 docker-compose up 我得到下一个错误

ERROR: Named volume "admin-stat-logs:C:/app/Logs:rw" is used in service "admin-stat-table" but no declaration was found in the volumes section.

我在第一种情况下犯了一个错误,它只是简单地挂载到文件夹,请原谅我的误解。

volumes:
  - "C:/ProgramData/Docker/volumes/admin-stat-logs:C:/app/Logs"

您不需要使用完整路径。您可以使用 docker-compose.yml 文件位置的相对路径。

当您写 admin-logs:C:/app/Logs 时,您是在告诉 docker-compose 使用名为 admin-logs 的卷。如果你想使用你docker-compose所在的文件夹,你可以写./admin-logs:C:/app/Logs.

如果您打算使用单独的 docker 卷,您需要先在 docker-compose.yml 中定义它。这是涵盖这两种情况的示例:

version: '3'
services:
  mytest:
    image: ubuntu:18.04
    volumes:
      - "mymnt:/mnt/volume"
      - "./mymnt_on_host:/mnt/mounted_folder"
volumes:
  mymnt:

您需要 docker-compose.yml 所在文件夹中的 mymnt_on_host 目录。

有关此主题的更多信息,您可以查看 docker-compose.yml

reference guide

更新:

如果您打算在 docker-compose 中使用已经创建的卷,您可以在卷定义中使用 external: true

例如

version: '3'
services:
  mytest:
    image: ubuntu:18.04
    volumes:
      - "mymnt:/mnt/volume"
      - "./mymnt_on_host:/mnt/mounted_folder"
volumes:
  mymnt:
  my_existing_volume:
    external: true

现在,如果您启动它,docker-compose 将不会尝试生成 my_existing_volume,但它会期望在机器上找到它。

有关更多信息,请查看 external 参考资料。

您能否在 docker-compose.yml 文件中显示您的版本值。它应该是 version: '3'version: '3.5'。可能你有 version: '2'