备份docker windows运行容器

备份docker windows运行容器,docker,windows-server-2016,Docker,Windows Server 2016,我运行了一些Docker Windows容器。我正在寻找备份这些容器的方法,而它们正在运行。但是,当我尝试使用标准方法备份容器时,会出现以下错误: PS C:\Users\roza> docker commit 908d6334d554 Error response from daemon: windows does not support commit of a running container PS C:\Users\roza> docker export 908d6334d5

我运行了一些Docker Windows容器。我正在寻找备份这些容器的方法,而它们正在运行。但是,当我尝试使用标准方法备份容器时,会出现以下错误:

PS C:\Users\roza> docker commit 908d6334d554
Error response from daemon: windows does not support commit of a running container
PS C:\Users\roza> docker export 908d6334d554 -o tar.tar
Error response from daemon: the daemon on this platform does not support export of a container
为什么我无法提交/导出运行的Windows容器


是否有一些方法(可能是非标准的、非常棘手的,可能是使用外部工具)来创建此类容器的备份?

这可能不是您想要听到的,但是。。。
在容器世界中,不需要备份正在运行的容器。如果在容器存在时丢失了一些东西,那么图像应该进行更好的分割。容器被终止后必须存在的任何内容(日志、资产甚至临时文件夹)都应映射为卷。这将使您能够更好地控制备份

Windows容器的提交还包括先停止它,然后提交。另一个限制是基于VSS的应用程序无法与容器进行互操作。正如前面的答案所建议的,容器的标准方法是简单地从图像旋转一个新容器

来自Microsoft的Windows映像(全部是Windows映像)已获得许可,我相信部分许可意味着您无法导出映像。缺少暂停/取消暂停是因为底层实现。Linux会暂停不在Windows上的cGroup。只有Windows HyperV容器支持暂停,因为它们使用HyperV命令来实现暂停


也就是说,备份docker中的任何内容都需要备份3件事情:

  • 映像注册表服务器
  • 容器的配置,最好是docker-compose.yml文件
  • 体积数据

你不备份容器本身,它们是短暂的,像牛一样对待。卷数据将是一个文件系统目录,您将在此目录上使用标准备份工具。如果无法在容器运行时进行备份,请先停止容器,并在备份完成后重新启动容器。

不确定windows容器是否有限制。但是您可以尝试
docker pause
然后
docker commit
,看看它是否真的有用,我刚刚收到另一个错误:来自守护程序的错误响应:无法暂停容器908d6334d5548f09ba6d3eeac5b38f56025c44b7056ef56c39edae06c003c252:容器908d6334d5548f09ba6d3eeac5b38f56025c44b7056ef56c39edae06c003c252在暂停期间遇到错误:Windows系统调用失败:不支持该请求。(0x32)