我对 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:
您需要一个
mymnt_on_host
docker-compose.yml 所在文件夹中的目录。有关此主题的更多信息,您可以查看 reference guide对于 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
但它会期望在机器上找到它。更多信息请查看 external引用。
关于docker - 为什么在 docker-compose 中我应该写卷的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61631015/