如何将卷从 Windows 主机挂载到 Windows 客户系统?
我在 Windows Server 2016 TP4 上使用 Docker。
按照文档 https://docs.docker.com/engine/userguide/containers/dockervolumes/
如果您在 Mac 或 Windows 上使用 Docker Machine,则 Docker 守护程序只能有限地访问您的 OS X 或 Windows 文件系统。Docker Machine 会尝试自动共享您的 /Users (OS X) 或 C:\Users (Windows) 目录。因此,您可以使用以下方式在 OS X 上挂载文件或目录。
在 Windows 上,使用以下命令挂载目录:
docker run -v /c/Users/[路径]:/[容器路径] ...`
我试过:
docker run --name iisdemo2 -it -p 80:80 -v /c/Users/mlin/meinedaten:/meinedaten iis cmd
这给了我一个错误:
docker : docker: Error response from daemon: Invalid bind mount spec "/c/Users/mlin/meinedaten:/meinedaten": volumeinvalid: Invalid volume specification:
'/c/Users/mlin/meinedaten:/meinedaten'.
我也尝试过:
docker run --name iisdemo2 -it -p 80:80 -v /c/Users/mlin/meinedaten:/c/meinedaten iis cmd
请注意,guest/container 上的路径 C:\meinedaten 已经存在,这是 docker 文档所要求的。
根据文档,该命令对我来说看起来是正确的。
(从 Mac OS X 主机到 Ubuntu docker 容器的卷安装正常,我只是在 Windows 上遇到了问题。)
更新
我也尝试过原生使用 Windows 容器(通过 Powershell),而不是使用 Docker。我遵循了https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/manage_powershell#create-a-shared-folder。
Add-ContainerSharedFolder -ContainerName mysql2 -SourcePath C:\Users\mlin\meinedaten -DestinationPath C:\meinedaten
但我也遇到了一些问题。
最终相关主题:
答案1
在 Windows 上,必须使用 Windows 样式的语义指定路径。您不应该在路径前使用斜杠。
docker run -v c:\Users\[path]:c:\[containerPath]
答案2
Windows 10 周年更新和 Windows Server 2016 RTM。
添加卷:
docker run -d -v my-named-volume:C:\MyNamedVolume testimage:latest
挂载主机目录:
docker run -d -v C:\Temp\123:C:\My\Shared\Dir testimage:latest
答案3
您是否正在 Mac 机器上运行 docker CLI 并尝试运行 Windows 容器?如果是这样,我假设您已经DOCKER_HOST
设置了环境变量,并且您的守护进程正在 Windows 机器上运行(因为您无法在 Windows 以外的任何操作系统上运行 Windows 容器)。
如果是这种情况,那么您尝试挂载到容器中的目录必须是 docker 主机上的目录,而不是恰好运行 docker CLI 的机器上的目录。因此,您可以在冒号的两侧使用 Windows 格式。如果您尝试挂载 Mac 上存在的目录,我还没有弄清楚这一部分,但需要自己解决 :)