我已经在 Windows 10 中设置了最新的 Docker Desktop 2.1.0.5 并创建和运行简单/琐碎的容器,即docker run --rm -v c:/Users:/data alpine ls /data
工作正常。
但是,我遇到了麻烦(1)创建一个与 Windows 主机上的文件夹绑定的卷并要求 Linux 容器使用它;(2) 为该容器指定一个 DockerFile。这是我尝试过的:
- 我通过命令创建了一个卷
docker volume create --driver local --opt type=none --opt device=c:\path\to\folder --opt o=bind test_vol
,并尝试像这样安装它docker run --rm -v test_vol:/data alpine ls /data
:这给了我错误:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe:来自守护进程的错误响应:挂载卷'/var/lib/docker/volumes/test_vol/_data'时出错:挂载本地卷失败:挂载c :\path\to\folder:/var/lib/docker/volumes/test_vol/_data,标志:0x1000:没有这样的文件或目录。
但是,如果我在命令中指定该主机文件夹docker run
而不通过先前创建的卷(如:)docker run --rm -v c:\path\to\folder:/data alpine ls /data
,那么它可以正常工作。
- 指定 DockerFile 也是有问题的。如果我使用这个命令:
docker run --rm --env-file c:\path\to\DockerFile -v c:\path\to\folder:/data alpine ls /data
,我得到这个错误:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: 读取 c:\path\to\DockerFile: 句柄无效。请参阅“C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help”。
- 对于上述内容,我尝试更改斜杠 (
/
vs\
) 的方向并将路径放在引号中,但这些都没有帮助或改变错误输出。 - 我确保在 Docker 桌面设置中打开了“共享驱动器”。
我对如何在 Docker for Windows 中指定这些路径感到非常困惑。有人可以建议如何解决这个问题吗?谢谢你。
TLDR
您应该使用
/host_mnt/c/path/to/folder
路径格式(注意小写的驱动器号)。深入
根据 Docker Desktop for Windows 的版本,我确定了以下有关路径格式的内容:
所以使用
C:\path\to\folder
应该适用于最新的 2.3.0.2 / 2.3.0.3 版本。如果您仍在使用 2.1.0.5 版,//C/path/to/folder
应该可以工作。如果您在检查创建的卷时查看路径(在 v2.3.0.3 中):
唯一保持不变的路径格式是
/host_mnt/c/path/to/folder
.这意味着,在 docker-compose 中,如果您使用任何其他格式并尝试重用已创建的卷(即两个连续的卷),则会出现错误:
结论
因此,要在所有版本之间兼容并在 Docker Compose 中拥有令人满意的工作流程,最好的办法是使用
/host_mnt/c/path/to/folder
(注意小写驱动器号):docker volume create --driver local --opt type=none --opt device=/host_mnt/c/path/to/folder --opt o=bind test_vol
docker run --rm -v test_vol:/data alpine ls /data
docker-compose 也是如此: