终于弄清楚了如何将 Windows Docker Toolbox 升级到 v1.12.5 并通过在Oracle VM VirtualBox
管理器中添加共享文件夹并禁用路径转换来保持我的卷正常工作。如果你有 Windows 10+,那么你最好使用更新的 Docker for Windows。
第一次升级痛点:
- 首先卸载 VirtualBox。
- 是的,这可能会破坏其他工具(如 Android Studio)中的内容。谢谢码头工人:(
- 安装新版本的 Docker 工具箱。
Redis 数据库示例:
redis:
image: redis:alpine
container_name: redis
ports:
- "6379"
volumes:
- "/var/db/redis:/data:rw"
在 Docker 快速入门终端 ....
- 运行
docker-machine stop default
- 确保 VM 被拖运
在 Oracle VM VirtualBox 管理器中...
default
通过或命令行在 VM
中添加共享文件夹
D:\Projects\MyProject\db
=>/var/db
在docker-compose.yml
...
- 映射的 redis 卷为:
"/var/db/redis:/data:rw"
在 Docker 快速入门终端 ....
- 设置
COMPOSE_CONVERT_WINDOWS_PATHS=0
(工具箱版本 >= 1.9.0)
- 运行
docker-machine start default
以重新启动 VM。
cd D:\Projects\MyProject\
docker-compose up
现在应该可以工作了。
现在创建redis数据库D:\Projects\MyProject\db\redis\dump.rdb
为什么要避免相对主机路径?
我避免了 Windows Toolbox 的相对主机路径,因为它们可能会引入无效的 '\' 字符。它不如使用相对于的路径好,docker-compose.yml
但至少我的开发人员同事可以轻松地做到这一点,即使他们的项目文件夹在其他地方而不必破解docker-compose.yml
文件(对 SCM 不利)。
原始问题
仅供参考...这是我使用干净的相对路径时遇到的原始错误,这些路径过去适用于旧版本。我的音量映射过去只是"./db/redis:/data:rw"
ERROR: for redis Cannot create container for service redis: Invalid bind mount spec "D:\\Projects\\MyProject\\db\\redis:/data:rw": Invalid volume specification: 'D:\Projects\MyProject\db\redis:/data
这有两个原因..
- 它无法访问
D:
驱动器
- 卷路径不能包含
\
字符
docker-compose
添加它们,然后责怪你!
- 用来
COMPOSE_CONVERT_WINDOWS_PATHS=0
阻止这种废话。
我建议在你的文件中记录你的额外 VM 共享文件夹映射,docker-compose.yml
因为你可能需要再次卸载 VirtualBox 并重置共享文件夹,无论如何你的开发人员会喜欢你的。