最终找到了如何将Windows Docker Toolbox升级到v1.12.5并保持我的数据卷正常工作的方法,那就是在Oracle VM VirtualBox管理器中添加一个共享文件夹,并禁用路径转换。如果你使用的是Windows 10+,那么最好使用新版本的Docker for Windows。
1. 升级痛苦:
- 首先卸载VirtualBox。
- 安装新版Docker Toolbox。
2. Redis数据库示例:
```
redis:
image: redis:alpine
container_name: redis
ports:
- "6379"
volumes:
- "/var/db/redis:/data:rw"
```
在Docker Quickstart终端中执行以下命令:
- 运行 `docker-machine stop default` 命令,确保VM已经停机。
在Oracle VM VirtualBox Manager中:
- 通过CLI或者命令行向default VM添加共享文件夹,例如:`D:\Projects\MyProject\db => /var/db`。
在docker-compose.yml中:
- 将redis容器映射到`"/var/db/redis:/data:rw"`。
在Docker Quickstart终端中:
- 设置`COMPOSE_CONVERT_WINDOWS_PATHS=0`(对于Toolbox版本>=1.9.0)。
- 运行`docker-machine start default`以重新启动虚拟机。
- 执行`cd D:\Projects\MyProject\`和`docker-compose up`应该可以正常工作了。
现在,在`D:\Projects\MyProject\db\redis\dump.rdb`中创建redis数据库。
为什么要避免使用相对主机路径?
我在Windows Toolbox中“避免使用相对主机路径”,因为它们可能会引入无效的'\'字符。这不像使用相对于docker-compose.yml的路径那样方便,但至少我的同事可以轻松地进行操作,即使他们的项目文件夹在其他地方也可以如此而无需修改docker-compose.yml文件(这对SCM来说很糟糕)。
原问题:
FYI...以下是我在使用适用于旧版本的可靠相对路径时收到的原始错误。我的卷映射过去曾经只是`"./db/redis:/data:rw"`。
错误:对于redis服务,无法创建容器:无效的绑定挂载规范"D:\\Projects\\MyProject\\db\\redis:/data:rw":无效的卷规范:'D:\Projects\MyProject\db\redis:/data'
这个错误有两个原因:
- 它无法访问
D:
磁盘
- 卷路径不能包含
\
字符
docker-compose
会添加它们,然后责怪你!!
- 使用
COMPOSE_CONVERT_WINDOWS_PATHS=0
来停止这种无聊的事情。
我建议在你的 docker-compose.yml
文件中记录你的额外的虚拟机共享文件夹映射,因为你可能需要再次卸载 VirtualBox 并重置共享文件夹,无论如何,你的同事们都会感谢你的。