Docker拉“意外的EOF”

时间:2018-12-07 22:31:19

标签: docker artifactory

我遇到了码头工人的问题。 场景是这样的:我们使用Codebuild + Packer + docker创建AMI,并将其用于部署。在此步骤中,我们从工件中拉出图像,除了拉出其中一层> 1Gb的层以外,其他所有过程都通过。重试几次后,失败并出现错误:下载失败,重试:未知Blob,然后出现“意外的EOF”。您曾经遇到过这样的问题吗?任何意见或建议都将受到高度赞赏。

5 个答案:

答案 0 :(得分:1)

这主要是由于网络薄弱(因为我使用的是移动热点)

配置 docker守护程序以减少 tcp数据包

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

此处 建议您要同时下载的docker pull层数。
默认值为3

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

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

这样做的缺点是牺牲了宝贵的时间:)
花时间像地狱一样

答案 1 :(得分:0)

我遇到了一个非常小的层的问题,该层由于某些未知原因而在注册表V2中损坏或损坏。重试图层后,docker pull失败并显示“意外的EOF”(在这种情况下,标识为“ 1f8fd317c5a4”。)

从源头重建图像并尝试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-7e414712”。)

从JSON输出中获取第1f8fd317c5a4层的完整sha256摘要,并在下一个命令中使用它:

curl -k -X DELETE "https://registry.local/v2/image-name/blobs/sha256:1f8fd317c5a406a75130dacddc02bd09a9abf44e068e2730dd8f5238666bb390"

现在,您将可以docker push registry.local/image-name:1033-develop-7e414712上传已删除的图层,一切正常。

答案 2 :(得分:0)

1- 停止 docker 服务:

$ sudo service docker stop

2- 运行 docker 服务,将 max-concurrent-downloads 减少到适合您的互联网带宽(不幸的是我是 1)并增加 max-download-attempts

$ sudo dockerd --max-concurrent-downloads 1 --max-download-attempts 10

PS:我不是 Docker 专家。但是,我相信有一种更好的方法可以通过向注册表或 docker 客户端添加一些配置来实现。

答案 3 :(得分:0)

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

"max-concurrent-downloads": 1

您将在路径 C:\Users\<user-name>\.docker\daemon.json 中找到此文件。

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

答案 4 :(得分:-1)

伙计们请注意,docker文件(Dockerfile)不得使用.txt扩展名,并且编码类型必须为UTF-8,否则它将无法创建映像。