Docker在Windows上构建失败,显示错误信息:"系统找不到指定的路径"。

24

我试图在Docker Windows上创建一个目录连接来创建8.3。但是它失败了,下面是错误信息。

D:\data\docker\sample>docker build -t sample .
Sending build context to Docker daemon  1.272GB
Step 1/4 : FROM microsoft/windowsservercore
 ---> 2cddde20d95d
Step 2/4 : RUN fsutil.exe behavior set disable8dot3 0
 ---> Running in ec6e7cc09ec6
The registry state is now: 0 (Enable 8dot3 name creation on all volumes).
 ---> 53805bc21858
Removing intermediate container ec6e7cc09ec6
Step 3/4 : RUN mklink /J "C:\PROGRA~1" "C:\Program Files"
 ---> Running in 2116f2070e6a
Junction created for C:\PROGRA~1 <<===>> C:\Program Files
re-exec error: exit status 1: output: time="2017-10-03T16:15:54+09:00" level=error msg="hcsshim::ImportLayer failed in Win32: The system cannot find the path specified. (0x3) layerId=\\?\C:\ProgramData\Docker\windowsfilter\5234d5f7cd7c2669db1818d9227a4be2822eeb72fc30071a495de78cd578b9f3 flavour=1 folder=C:\WINDOWS\TEMP\hcs088640839"
hcsshim::ImportLayer failed in Win32: The system cannot find the path specified. (0x3) layerId=\\?\C:\ProgramData\Docker\windowsfilter\5234d5f7cd7c2669db1818d9227a4be2822eeb72fc30071a495de78cd578b9f3 flavour=1 folder=C:\WINDOWS\TEMP\hcs088640839

Dockerfile如下:
FROM microsoft/windowsservercore
RUN fsutil.exe behavior set disable8dot3 0
RUN mklink /J "C:\PROGRA~1" "C:\Program Files"
CMD [ "powershell" ]

我该如何在Docker Windows上创建一个目录链接?
5个回答

28
我猜测你的问题实际上与创建目录链接无关(注意,你的构建确实已经完成了这一步),而是与超出docker容器基本大小有关(我看到你正在从windowsservercore拉取,它大约是10GB,并且浏览网页告诉我默认容器基础大小为10GB)。
尝试通过添加此JSON将大小更改为20GB来更改docker守护程序配置:
"storage-opts": [
  "size=20G"
]

daemon config

我遇到了相同的错误消息,尝试了各种故障排除方法,并通过该守护进程设置解决了它。


1
这个救了我。我的构建失败已经持续了几天,不知道为什么我没有早点发现这个。最终成功了。虽然我可以看到这个错误发生的原因有很多,但我敢打赌这将是许多情况下的问题。考虑到 OP 从未回来过,这应该被标记为答案。 - Joe.Flanigan

1
对于Docker企业版,可以在此处配置 C:\ProgramData\docker\config\daemon.json。
"storage-opts":["size=20G"]

如果该文件不存在,请创建它。 这里的链接

0
我无法通过其他方法解决这个问题;对我有效的方法是删除并重新拉取基础镜像。因此,可能会由于损坏的镜像导致出现此错误。

0

检查项目是否正在运行!如果正在运行,请完成它。然后再次检查命令


0

似乎 Docker for Windows 不支持联接和硬链接。

我曾尝试在容器中创建一个带有 Cygwin 的镜像时遇到了类似的问题,因为 Cygwing 经常使用硬链接。一切都很顺利,直到 Docker 尝试提交一个镜像并出现“hcsshim::ImportLayer - 无法找到路径”错误。当我在容器中去掉硬链接后,就能成功提交镜像而没有问题。


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