我在Docker遇到了一个问题,情况是这样的:我们使用Codebuild+Packer+Docker创建AMI,用于部署。在此步骤中,我们从artifactory中提取映像,除提取其中一个大于1Gb的层外,所有映像均顺利通过。几次重试后,失败并显示错误:下载失败,正在重试:未知的斑点,然后“意外的EOF”。你曾经遇到过这样的问题吗?任何意见或建议是非常感谢。
esyap4oy1#
这主要是因为网络很弱(因为我使用的是移动的热点)已配置Docker守护程序以减少tcp数据包
$ dockerd --max-concurrent-downloads <int>
这里的**** 表示你想同时下载的dockerpull层的数量。
默认值为3
在我的情况下,我设置为2
$ dockerd --max-concurrent-downloads 2 &>/dev/null
这样做的缺点是牺牲了你宝贵的时间:)要花很多时间
qeeaahzv2#
在Windows上使用Docker Desktop时,找不到dockerd命令,然后在daemon.json文件中添加以下条目并重新启动Docker服务。
dockerd
daemon.json
"max-concurrent-downloads": 1
C:\Users\<user-name>\.docker\daemon.json
这将以连续的方式拉取图层,因此需要时间,但是的,这是通过弱网络连接下载大图像文件的替代解决方案。
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上传你删除的图层了,一切正常。
docker pull
docker push
curl
curl -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' -sk "https://registry.local/v2/image-name/manifests/1033-develop-7e414712"
curl -k -X DELETE "https://registry.local/v2/image-name/blobs/sha256:1f8fd317c5a406a75130dacddc02bd09a9abf44e068e2730dd8f5238666bb390"
docker push registry.local/image-name:1033-develop-7e414712
hmtdttj44#
由于连接不好也有同样的问题。在文档中,这里是dockerd command。对于Linux,只需添加:
$ dockerd --max-concurrent-downloads 2 $ dockerd --max-download-attempts 10
对于windows docker桌面,打开设置-〉Docker引擎,然后弹出下面的数字最适合你。你可以看到所有的选项在docs如上所述。
aamkag615#
1.停止Docker服务:第一个月1.运行Docker服务,减少max-concurrent-downloads到适合您的互联网带宽(不幸的是1对我来说)和增加max-download-attempts:sudo dockerd --max-concurrent-downloads 1 --max-download-attempts 10
max-concurrent-downloads
max-download-attempts
sudo dockerd --max-concurrent-downloads 1 --max-download-attempts 10
**附言:**我不是一个DockerMaven。但是,我相信有一个更好的方法可以做到这一点,无论是添加一些配置到注册表或您的Docker客户端。
5条答案
按热度按时间esyap4oy1#
这主要是因为网络很弱(因为我使用的是移动的热点)
已配置Docker守护程序以减少tcp数据包
这里的**** 表示你想同时下载的dockerpull层的数量。
默认值为3
在我的情况下,我设置为2
这样做的缺点是牺牲了你宝贵的时间:)
要花很多时间
qeeaahzv2#
在Windows上使用Docker Desktop时,找不到
dockerd
命令,然后在daemon.json
文件中添加以下条目并重新启动Docker服务。C:\Users\<user-name>\.docker\daemon.json
中找到此文件。*这将以连续的方式拉取图层,因此需要时间,但是的,这是通过弱网络连接下载大图像文件的替代解决方案。
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
上传你删除的图层了,一切正常。hmtdttj44#
由于连接不好也有同样的问题。在文档中,这里是dockerd command。
对于Linux,只需添加:
对于windows docker桌面,打开设置-〉Docker引擎,然后弹出下面的数字最适合你。你可以看到所有的选项在docs如上所述。
aamkag615#
1.停止Docker服务:第一个月
1.运行Docker服务,减少
max-concurrent-downloads
到适合您的互联网带宽(不幸的是1对我来说)和增加max-download-attempts
:sudo dockerd --max-concurrent-downloads 1 --max-download-attempts 10
**附言:**我不是一个DockerMaven。但是,我相信有一个更好的方法可以做到这一点,无论是添加一些配置到注册表或您的Docker客户端。