无法在 Windows 10 上将文件复制到 Windows 容器('docker cp')

35

我在我的笔记本电脑上安装了Windows版的Docker,并在Docker的设置中从Linux容器切换到Windows容器(这导致了几次重启和Windows更新)。然后我使用以下命令拉取了一个镜像并基于它运行了一个容器:

docker pull microsoft/dotnet-framework
docker run -it microsoft/dotnet-framework cmd
在第二个终端窗口中,我执行了以下命令:
docker cp app container_id:/

并收到了以下错误消息:

来自守护程序的错误响应:不支持针对正在运行的 Hyper-V 容器的文件系统操作

我在Google上搜索了这个错误,但很出乎意料地没有找到任何(解释性的)信息。有没有办法让我在Windows 10上将图像作为Windows容器而不是Hyper-V容器运行?

最终,我将在Windows Server 2016主机上部署此容器,但我需要在运行Windows 10专业版的笔记本电脑上进行所有开发和测试。

Docker版本

Client:
 Version:      17.06.0-ce
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 21:30:30 2017
 OS/Arch:      windows/amd64

Server:
 Version:      17.06.0-ce
 API version:  1.30 (minimum version 1.24)
 Go version:   go1.8.3
 Git commit:   02c1d87
 Built:        Fri Jun 23 22:19:00 2017
 OS/Arch:      windows/amd64
 Experimental: true

这个东西在Windows 2016上能用吗? - Tarun Lalwani
2
错误信息很明确。由于您在Windows 10上运行它,因此除了Hyper-V之外,您无法运行任何其他隔离模式。如果您将其部署在Windows 2016上,则可以在“进程”隔离模式下运行它,并且不会出现此问题。 - Gregory Suvalian
2
感谢@GregorySuvalian...我通过停止容器、运行docker cp命令,然后重新启动容器来解决了这个问题。虽然有点麻烦,但当我仔细再次查看错误时,我成功地解决了这个问题。 - Web User
我建议使用scp在主机和容器之间进行复制。 - Summer Sun
2个回答

41

根据@GregorySuvalian的评论,我了解到Windows 10仅支持Hyper-V运行时。因此,我的解决方法是停止容器,运行docker cp命令,然后重新启动容器。(与设置卷相比,我更喜欢这种方法,因为它只需进行一次操作。)


1
对于想要将主机文件夹挂载到容器中的人,我成功地将以下内容添加到我的docker运行命令中:--mount type=bind,source="c:/host/folder/path/with/forward/slashes",target="C:/container/folder/path/with/forward/slashes" - Vimes
如果您停止容器,您要将其复制到哪里?由于没有容器ID,当您再次启动容器时,将获得一个全新的实例并具有不同的ID。 - Mehdi

4

我修改了Vimes的答案,因为我在使用--mount命令时遇到了一些困难。实际的运行命令需要用引号''包含起来,从type...开始。

--mount 'type=bind,source="c:/host/folder/path/with/forward/slashes",target="C:/container/folder/path/with/forward/slashes"'


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