无法将卷标志与 windows 容器一起使用

Unable to use the volume flag with a windows container

我正在尝试将主机文件夹映射到来宾,其方式与在 linux/mac 上通过 -v "$(pwd)":/code 轻松完成的方式相同。我想不出一个简单的例子来使这个与 Windows 容器一起工作。

docker build -t="webdav" .
docker run --rm -it -v C:\junk:C:\code --name webdav webdav powershell


C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: container f0fa313478fddb73e34d47699de0fc3c2a3bdb202ddcfc2a124c5c8b7523ec09 encountered an error during Start: failure in a Windows system call: The connection with the Virtual Machine hosting the container was closed. (0xc037010a).

我尝试了无数其他变体,接受的答案here给出了同样的错误。

docs好像只指Docker工具箱。这个例子只给我 invalid bind mount spec.

我的Docker文件

FROM microsoft/windowsservercore

RUN powershell -Command Add-WindowsFeature Web-Server

RUN powershell -Command mkdir /code

WORKDIR /code
ADD * /code/

OS 名称:Microsoft Windows 10 Pro OS 版本:10.0.14393 N/A 内部版本 14393

版本 17.03.1-ce-win5 (10743) 渠道:稳定 b18e2a5

免责声明:我最初在 docker forums 上发布了这篇文章,但没有收到任何回复。

编辑: 找到了。 https://docs.docker.com/engine/reference/builder/#volume "When using Windows-based containers, the destination of a volume inside the container must be one of: a non-existing or empty directory; or a drive other than C:"

或此处:https://docs.docker.com/engine/reference/commandline/run/#mount-volume--v---read-only "The following examples will fail when using Windows-based containers, as the destination of a volume or bind-mount inside the container must be one of: a non-existing or empty directory; or a drive other than C:. Further, the source of a bind mount must be a local directory, not a file."

令我震惊的是,这些是记录这种差异的不明显的地方。您在哪里查找有关此问题的文档?我会在此处添加 :)

是否需要汇总 Linux 和 Windows 之间的差异?

旧答案(用于上下文) 以下是使用 GUI 安装卷的分步指南: https://rominirani.com/docker-on-windows-mounting-host-directories-d96f3f056a2c

通过阅读其他一些论坛帖子,听起来密码中的特殊字符可能会出错。

如果您仍然遇到问题,可以阅读这里的一个主题: https://github.com/docker/docker/issues/23992

希望对您有所帮助!

我不确定 if/where moby repo 文档发布到 Docker 文档,但是 this issue 表示卷不能引用容器中的现有文件夹。在我的示例中,我首先创建了 c:\code。如果我更改命令:

docker run --rm -it -v C:\junk:C:\code2 --name webdav webdav powershell

...它将在容器中创建并挂载 c:\code2 以指向主机上的 c:\junk。