首页 > 解决方案 > 为什么在 docker-compose 我应该写卷的完整路径?

问题描述

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

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

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

如果我写:

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

它会生成错误错误:在服务“admin-stat-table”中使用了命名卷“admin-logs:C:/app/Logs:rw”,但在卷部分中未找到声明。

为什么会这样?

更新

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

在此处输入图像描述

我在我的情况下写同样的:

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

我之前通过终端创建音量。当我启动 docker-compose up 我得到下一个错误

错误:在服务“admin-stat-table”中使用了命名卷“admin-stat-logs:C:/app/Logs:rw”,但在卷部分未找到声明。

我在第一种情况下犯了一个错误,这是一个简单的文件夹挂载,对不起我的误解。

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

标签: dockerdocker-composedocker-for-windows

解决方案


您不需要使用完整路径。您可以使用指向 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:

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

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

更新:

如果您打算在 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,但它会期望已经在机器上找到它。

有关更多信息,请查看外部参考。


推荐阅读