Docker拉出“意外EOF”

dfuffjeb  于 2023-01-04  发布在  Docker
关注(0)|答案(5)|浏览(545)

我在Docker遇到了一个问题,情况是这样的:我们使用Codebuild+Packer+Docker创建AMI,用于部署。在此步骤中,我们从artifactory中提取映像,除提取其中一个大于1Gb的层外,所有映像均顺利通过。几次重试后,失败并显示错误:下载失败,正在重试:未知的斑点,然后“意外的EOF”。你曾经遇到过这样的问题吗?任何意见或建议是非常感谢。

esyap4oy

esyap4oy1#

这主要是因为网络很弱(因为我使用的是移动的热点)
已配置Docker守护程序以减少tcp数据包

$ dockerd --max-concurrent-downloads <int>

这里的**** 表示你想同时下载的dockerpull层的数量。

默认值为3

在我的情况下,我设置为2

$ dockerd --max-concurrent-downloads 2 &>/dev/null

这样做的缺点是牺牲了你宝贵的时间:)
要花很多时间

qeeaahzv

qeeaahzv2#

在Windows上使用Docker Desktop时,找不到dockerd命令,然后在daemon.json文件中添加以下条目并重新启动Docker服务。

"max-concurrent-downloads": 1
  • 您将在路径-C:\Users\<user-name>\.docker\daemon.json中找到此文件。*

这将以连续的方式拉取图层,因此需要时间,但是的,这是通过弱网络连接下载大图像文件的替代解决方案。

6tdlim6h

6tdlim6h3#

我遇到了这个问题,一个非常小的层在注册表V2中由于一些未知的原因损坏或断开。docker pull在重试该层(在本例中标识为“1f 8 fd 317 c5 a4”)后失败,并出现“意外的EOF”。
从源代码重建图像并尝试docker push显示“层已存在”,未修复问题。
我可以像这样使用curl删除有问题的层;
curl -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' -sk "https://registry.local/v2/image-name/manifests/1033-develop-7e414712"
(将注册表替换为“registry.local”,将映像名称替换为“image-name”,将映像标签或“latest”替换为“1033-develop-7 e414712”。)
从JSON输出中获取层1f 8 fd 317 c5 a4的完整sha 256摘要,并在下一个命令中使用它:
curl -k -X DELETE "https://registry.local/v2/image-name/blobs/sha256:1f8fd317c5a406a75130dacddc02bd09a9abf44e068e2730dd8f5238666bb390"
现在你可以用docker push registry.local/image-name:1033-develop-7e414712上传你删除的图层了,一切正常。

hmtdttj4

hmtdttj44#

由于连接不好也有同样的问题。在文档中,这里是dockerd command
对于Linux,只需添加:

$ dockerd --max-concurrent-downloads 2
$ dockerd --max-download-attempts 10

对于windows docker桌面,打开设置-〉Docker引擎,然后弹出下面的数字最适合你。你可以看到所有的选项在docs如上所述。

aamkag61

aamkag615#

1.停止Docker服务:第一个月
1.运行Docker服务,减少max-concurrent-downloads到适合您的互联网带宽(不幸的是1对我来说)和增加max-download-attemptssudo dockerd --max-concurrent-downloads 1 --max-download-attempts 10

**附言:**我不是一个DockerMaven。但是,我相信有一个更好的方法可以做到这一点,无论是添加一些配置到注册表或您的Docker客户端。

相关问题