Docker/Windows 容器:如何在 Windows 2016 上将主机文件夹挂载为数据卷

Docker/Windows 容器:如何在 Windows 2016 上将主机文件夹挂载为数据卷

如何将卷从 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 上存在的目录,我还没有弄清楚这一部分,但需要自己解决 :)

相关内容