docker - 为什么在 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"
解决方案
您不需要使用完整路径。您可以使用指向 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 所在文件夹中的目录。
有关此主题的更多信息,您可以查看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
,但它会期望已经在机器上找到它。
有关更多信息,请查看外部参考。
推荐阅读
- javascript - JavaScript 的 Sublime Text3 控制台不输出“返回”值。我该如何解决?非常感谢提前
- function - 检查参数是否丢失
- python - 如何计算作为列表的字典值中最常见的值?
- flutter - 是否可以在颤动中将 DocumentReference 存储在 shared_preferences 中?
- amazon-web-services - Cloudformation YAML 自定义变量
- macos - 在 Mac 上重命名/翻译多个文件
- google-sheets - 如何阅读谷歌文档中的表格,然后更改其单元格背景颜色
- html - 使用 BeautifulSoup,我可以在标签之间获取带有其他字符串的文本以将它们分开吗?
- java - 为什么我无法使用以下代码成功编译?
- android - Android:如何将数据从 Activity 发送到 Fragment(错误:Bundle 为空)