为什么在 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'
我对 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'