在docker容器中安装cygwin时出错:系统找不到指定的路径。 (0x3)错误= hcsshim :: ImportLayer-在Win32中失败失败

时间:2020-06-02 20:14:40

标签: docker dockerfile cygwin docker-for-windows windows-server-2019

我有一个简单的Dockerfile:

FROM mcr.microsoft.com/windows:1809

# Install chocolatey
RUN powershell.exe Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Install cygwin
RUN choco install -y cygwin --version 3.1.2
RUN refreshenv

CMD [ "powershell" ]

结果是

PS C:\vagrant\delme> docker build . -t localhost/async_windows_service
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM mcr.microsoft.com/windows:1809
 ---> 2de0138f1799
Step 2/5 : RUN powershell.exe Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
 ---> Using cache
 ---> 7ee59b0c4334
Step 3/5 : RUN choco install -y cygwin --version 3.1.2
 ---> Running in e6c3d1130a4e
Chocolatey v0.10.15
Installing the following packages:
cygwin
By installing you accept licenses for the packages.
Progress: Downloading chocolatey-core.extension 1.3.5.1... 100%
Progress: Downloading Cygwin 3.1.2... 100%

chocolatey-core.extension v1.3.5.1 [Approved]
chocolatey-core.extension package files install completed. Performing other installation steps.
 Installed/updated chocolatey-core extensions.
 The install of chocolatey-core.extension was successful.
  Software installed to 'C:\ProgramData\chocolatey\extensions\chocolatey-core'

Cygwin v3.1.2 [Approved]
cygwin package files install completed. Performing other installation steps.
Download site: http://mirrors.kernel.org/sourceware/cygwin/
Installing 64-bit Cygwin...
Cygwin has been installed.
Added C:\ProgramData\chocolatey\bin\Cygwin.exe shim pointed to 'c:\tools\cygwin\cygwin.bat'.
Copying cygwin package manager (setup) to C:\tools\cygwin
Environment Vars (like PATH) have changed. Close/reopen your shell to
 see the changes (or in powershell/cmd.exe just type `refreshenv`).
 ShimGen has successfully created a shim for setup-x86.exe
 The install of cygwin was successful.
  Software installed to 'C:\tools\cygwin'

Chocolatey installed 2/2 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
re-exec error: exit status 1: output: time="2020-06-02T22:03:52+02:00" level=error msg="hcsshim::ImportLayer - failed failed in Win32: The system cannot find the path specified. (0x3)" error="hcsshim::ImportLayer - failed failed in Win32: The system cannot find the path specified. (0x3)" importFolderPath="C:\\ProgramData\\docker\\tmp\\hcs292836507" path="\\\\?\\C:\\ProgramData\\docker\\windowsfilter\\eeae1d5f886b0b035f4466cf124056f7c1924283548cd960e0024a33d1219984"
hcsshim::ImportLayer - failed failed in Win32: The system cannot find the path specified. (0x3)

我尝试了不同版本的cygwin,也根据建议修改了存储大小,例如here

这很奇怪。安装似乎可以正常进行,但是docker无法通过path="\\\\?\\C:\\ProgramData\\docker\\windowsfilter\\eeae1d5f886b0b035f4466cf124056f7c1924283548cd960e0024a33d1219984"

找到文件(我认为是该层)

确实,在我的C:\ProgramData\docker\windowsfilter目录中,没有以eeae1d开头的文件夹...

请注意,只有cygwin会引起问题。我可以安装各种其他软件。

1 个答案:

答案 0 :(得分:1)

似乎Cygwin经常使用的硬链接没有被Docker正确处理。特别是当Docker尝试提交映像时,它将失败并显示“ hcsshim :: ImportLayer-找不到路径”错误。

我最近也遇到了同样的问题,在摆脱Cygwin安装中的硬链接后,我能够毫无问题地提交映像。

要摆脱硬链接,请压缩和解压缩Cygwin文件夹。