Docker 构建总是失败并出现错误 hcsshim::PrepareLayer - 在 Win32 中失败:函数不正确。 (0x1) Windows 个容器

Docker build fails always with error hcsshim::PrepareLayer - failed failed in Win32: Incorrect function. (0x1) Windows Containers

重现步骤非常简单。

创建一个 Docker 文件。

我的 Docker 文件有更多行,但我已对它们进行了修剪,以便我们可以关注问题的根源。

说的是,仅这两行(没有任何其他内容)就说明了问题。

FROM microsoft/iis
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; $VerbosePreference = 'Continue'; "]

运行 docker build . 你会得到 hcsshim::PrepareLayer - failed failed in Win32: Función incorrecta. (0x1).

Windows 10 Pro 1909(但它也发生在 1903 年)

Docker版本:2.1.0.5

引擎:19.03.5

机器:0.16.2

这仍然是 issue (still open) with Win10。 看起来像使用文件系统过滤器(如 Dropbox、Box 等)卸载云存储提供商作为解决方法是某些用户的一个选项。

卸载云存储提供商或病毒扫描程序;如果您确定哪个不起作用,请在 https://github.com/docker/for-win/issues/3884

中分享

我找到了解决问题的方法。

阅读所有 https://github.com/docker/for-win/issues/3884 错误,一些人找到了一个简单的解决方案:重命名 C:\windows\system32\driver\cbfsconnect2017.sys 以便下次启动时不会加载它。

禁用该驱动程序使我能够在将近一年的时间里第一次在 windows 容器中进行 docker 构建。

在我的案例中,Box Sync 就是使用该驱动程序的那个。

编辑:@GustavoTM 发现 pCloud 提出了同样的问题。 EDIT2:@VonC 注意到 GitHub 中的一些人已经解决了删除另一个文件的问题:C:\Windows\System32\drivers\cbfs6.sys。我没试过,但如果对其他人有帮助,我会把它放上来。

好处是我不需要卸载 Box,只需重命名该文件即可。

在我的情况下,问题类似,但文件 cbfs6.sys 被放置在未安装的应用程序 Jungle 磁盘的其余部分中的某个位置,在文件夹 c:\Program files\Jungle disk ... 中的某个位置。它是 EldoS Corporation 签署的回调文件系统的一部分。

文件夹只能重命名不能直接删除。所以我可以在 PC 重启后立即删除它,在 运行 Docker 之前。所以它也可以在 Docker 服务重启期间被删除。