无法在Windows版Docker Desktop中挂载D:\或E:\驱动器的卷

3

我在互联网和stackoverflow上搜索了这个问题,但没有成功。

我正在使用Windows 10上的Docker桌面版4.12.0,并使用WSL2作为后端。

在Windows命令提示符窗口中,以下命令可用于列出c:/data中的文件:

docker run --rm -v c:/data:/target alpine ls /target 

但是以下任何一种方式都不起作用。/目标目录始终为空!
docker run --rm -v d:/data:/target alpine ls /target 

docker run --rm -v "d:/data:/target" alpine ls /target

docker run --rm -v "d:/data":/target alpine ls /target 

docker run --rm -v /mnt/d/data:/target alpine ls /target

docker run --rm -v /run/desktop/host/d/data:/target alpine ls /target 

docker run --rm -v "/run/desktop/host/d/data:/target" alpine ls /target

然而,在WSL 2终端窗口中,以下操作可以工作并列出/target目录下的文件!

docker run --rm -v /mnt/d/data:/target alpine ls /target

但我想使用Docker桌面版来在Windows操作系统的命令提示符中运行。最终想要在docker-compose.yml文件中挂载卷。

根据过去stackoverflow答案中不同用户的反馈,上述某些命令似乎可以工作。不清楚是因为Docker桌面版的不同版本,还是因为他们尝试在WSL2终端窗口或Windows命令提示符窗口中进行。

TIA

1个回答

6
您面临着一个关于Docker卷的Microsoft限制

"我们支持映射整个第二个驱动器,但目前不支持其部分。"


你只需将整个D驱动器挂载为 d:
其他选项,如根目录(d:\)或路径(d:\somefolder),不适用于第二个驱动器。
在你的情况下,这意味着执行类似以下操作:
docker run -it -v d: alpine ls /d/data

如果在您的容器内创建了一个空的d文件夹,那么这意味着您正在驱动器中遇到权限问题。
请注意,即使问题评论是来自2016年,看起来限制仍然存在...

感谢提供链接和可能的原因。其中提到它在容器内创建了空的D盘驱动器。您发布的命令会出错。也许您的意思是docker run -it -v "/d":/target alpine ls /target。我不确定https://stackoverflow.com/a/61880665/6598413在2020年是如何工作的。也许这是从WSL终端内部进行的?我需要将主机文件夹绑定到容器卷中,以便从主机文件夹读取数据。 - meDev
这段程序可能有空格的拼写错误...你可以检查一下编辑吗? - aran
问题是,应该挂载整个D驱动器,因此如果根目录中存在数据文件夹,则应能够执行ls alpine/data... - aran
编辑不起作用。需要运行docker run -it -v "/d":/target alpine ls /target。 - meDev
你发来的链接中的这篇文章讲述了如何在容器内挂载空驱动器。https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/334#issuecomment-388315150 - meDev
是的,你说得对...我试了另一个选项,只是编辑了答案。无论如何,在运行容器之前,也许创建一个从C指向D的符号链接会更快? - aran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接