解决国产系统 Docker 拉取大镜像卡顿之谜

今天解决了客户 arm64 机器上 docker pull 大镜像卡住的问题。

由来

同事让我帮忙解决客户现场 Docker 镜像无法拉取的问题,故障如下会一直卡住:

$ docker pull xxx:5000/xxxx
xxx: Pulling from xxx/xxxxxx
7c0b344a74c2: Extracting [>                                                  ]  294.9kB/26.66MB
7c0b344a74c2: Download complete
e53ed7fd3110: Download complete
d2cae797bc79: Download complete
ec3ddc176f08: Download complete
2969517e196e: Download complete
097fa64722e8: Download complete
1dde4ca01a5a: Download complete

离线文件 load -i 后,打上 tag 推送到镜像仓库,然后本地删除这个镜像,然后拉取还是像上面这样卡住,部分小镜像拉取没问题,所以不可能是 docker data-root 的挂载 option 影响。环境信息如下:

$ docker info
...Server Version: 19.03.15Storage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: ea765aba0d05254012b0b9e595e995c09186427frunc version: v1.0.0-0-g84113eefinit version: fec3683Security Options:seccompProfile: defaultKernel Version: 4.19.90-2211.5.0.0178.22.uel20.aarch64Operating System: UnionTech OS Server 20OSType: linuxArchitecture: aarch64CPUs: 24Total Memory: 94.56GiBName: host-xxxxID: RTQS:5TXE:5T3S:YW7X:OHPK:FZ7D:7EHD:DH5Z:JNBV:FVXS:24FA:EIVSDocker Root Dir: /data/kube/dockerDebug Mode: trueFile Descriptors: 29Goroutines: 46System Time: 2023-04-12T16:10:25.33362426+08:00
$ uname -a
Linux host-x 4.19.90-2211.5.0.0178.22.uel20.aarch64 #1 SMP Thu Nov 24 10:33:07 CST 2022 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="UnionTech OS Server 20"
NAME="UnionTech OS Server 20"
VERSION_ID="20"
VERSION="20"
ID=uos
HOME_URL="https://www.chinauos.com/"
BUG_REPORT_URL="https://bbs.chinauos.com/"
VERSION_CODENAME=fuyu
PLATFORM_ID="platform:uel20"

排查

卡住的过程中,另外开一个 ssh top 发现进程 unpigz 占用较高,利用其 pid 查看了一些信息:

$ pstree -sp 1170083
systemd(1)───dockerd(1169795)───unpigz(1170083)─┬─{unpigz}(1170084)├─{unpigz}(1170086)└─{unpigz}(1170087)

发现这个进程是 Docker 调用的,strace 只能看到卡住,kill 了 unpigz 后,卡住的 pull 开始报错了:

failed to register layer: Error processing tar file(exit status 1): unexpected EOF

Docker 的镜像每层 layer 实际是 tar,pull 时会下载 tar 包然后解压,这个看着是解压相关的逻辑出现了问题。在 Docker 源码里搜索 Error processing tar file 后找到:

// https://github.com/moby/moby/blob/v19.03.15/pkg/chrootarchive/archive_unix.go#L90-L116cmd := reexec.Command("docker-untar", dest, root)...if err := cmd.Wait(); err != nil {// when `xz -d -c -q | docker-untar ...` failed on docker-untar side,// we need to exhaust `xz`'s output, otherwise the `xz` side will be// pending on write pipe foreverio.Copy(ioutil.Discard, decompressedArchive)return fmt.Errorf("Error processing tar file(%v): %s", err, output)}return nil

看注释里的xz -d -c -q | docker-untar ...,与 unpigz 的 cmdline 和一个卡住的 docker-untar 进程相符:

$ xargs -0 < /proc/1170083/cmdline
/usr/bin/unpigz -d -c
$ ps aux | grep docker-unta[r]
root     1164788  0.0  0.0 1491008 39488 pts/2   Sl+  15:21   0:00 docker-untar / /data/kube/docker/overlay2/546b7b992b53b243450807b8150c4a1905e93afae604da69a21bbaaf443f178e/diff

看来是 exec 调用 unpigz 解压管道给 reexec 注册的 docker-untar,而上面的 unpigz 进程树显示是 docker 默认调用的而非 xz。搜索后发现,unpigz 是一个在 gz 格式处理上比 gzip 更快的实现。既然 Docker 是 exec 调用的 unpigz,那就在源码里搜索它看看:

// https://github.com/moby/moby/blob/v19.03.15/pkg/archive/archive.go#L32-L39
func init() {if path, err := exec.LookPath("unpigz"); err != nil {logrus.Debug("unpigz binary not found in PATH, falling back to go gzip library")} else {logrus.Debugf("Using unpigz binary found at path %s", path)unpigzPath = path}
}

往下翻看,发现 unpigzPath 的 exec 调用逻辑:

// https://github.com/moby/moby/blob/v19.03.15/pkg/archive/archive.go#L160-L174
func gzDecompress(ctx context.Context, buf io.Reader) (io.ReadCloser, error) {if unpigzPath == "" {return gzip.NewReader(buf)}disablePigzEnv := os.Getenv("MOBY_DISABLE_PIGZ")if disablePigzEnv != "" {if disablePigz, err := strconv.ParseBool(disablePigzEnv); err != nil {return nil, err} else if disablePigz {return gzip.NewReader(buf)}}return cmdStream(exec.CommandContext(ctx, unpigzPath, "-d", "-c"), buf)
}

现场 unpigz 版本:

$ rpm -qf /bin/unpigz
pigz-2.4-7.uel20.01.aarch64
$ rpm -V pigz
# -V 查看包也没被修改

注意看其中有个 env 设置不使用 PIGZ 而是使用 gzip,然后启动 Docker Daemon 时设置这个 env 就可以拉取镜像了:

$ systemctl stop docker
# 临时命令行前台 debug 启动下看看是没问题的
$ MOBY_DISABLE_PIGZ=true dockerd --debug

后续

UOS 这个系统需要授权才能使用 yum 安装升级,访问 repo 里的 url 会报错 401,让客户联系 UOS 厂商升级 pigz 包发现是最新的版本,只能使用 MOBY_DISABLE_PIGZ 环境变量回退到 gz 了。

e92f2a06f0482bbd1e02d5b24db440ba.gif

ef12f9fd8f26d59fb7c57b73bf676766.png

你可能还喜欢

点击下方图片即可阅读

尝试用 ChatGPT 完整的实现一个 Serverless 后端工程

2023-04-19

0e41e3b9cafba1434221b2a413f06c36.jpeg

Laf Assistant:云开发从未如此爽快!

2023-04-12

607fb8eed8c787ca0af46e7a620f639f.jpeg

AI 绘画神还原王维的《鸟鸣涧》

2023-04-11

ff828caf4274a01a5a28ad56e738d6e4.jpeg

ChatGPT 与 Midjourney 强强联手,让先秦阿房宫重现辉煌!

2023-04-06

b110c197e83f2bf724e4d2206f9ebed0.jpeg

63d3d3266aee9184f1325f0dbf9d0fba.gif

云原生是一种信仰 🤘

关注公众号

后台回复◉sealos◉获取以 kubernetes 为内核的云操作系统发行版,在云桌面中管理 Kubernetes 集群生命周期,运行分布式应用程序!

d9544cf67caa71799207a29692536d6c.gif

9c791774227a70c2702b44da4a1233cb.gif

点击 "阅读原文" 获取更好的阅读体验!

发现朋友圈变“安静”了吗?

33a168819f725ce0a0353682d1a38797.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11302.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国版ChatGPT“狂飙”的机会在哪儿?

能否为百度止颓&#xff0c;不仅取决于技术能力&#xff0c;更取决于公司的经营策略和市场环境。目前&#xff0c;百度在人工智能领域已经取得了一些成果&#xff0c;比如语音识别、图像识别等方面&#xff0c;但在对话系统领域仍有待提高。如果百度能够利用自身的优势&#xf…

GPT-3.5还没研究明白,GPT-4又来了,chatGPT会进化成什么样?

基于GPT-3.5的chatGPT热度才稍稍减退没多久&#xff0c;GPT-4又来了&#xff0c;文新一言的发布会也槽点满满&#xff0c;差距似乎越来越大了。 chatGPT到底厉害在哪&#xff1f;为什么突然就爆火了呢&#xff1f; 它的爆火&#xff0c;一方面&#xff0c;和它的出现形态有关…

.IMA格式CT数据转成普通的.png或.jpg

在找医学图像去噪数据集的时候&#xff0c;发现2016 0mayo clinic 的数据格式是.IMA&#xff0c;我现在像把这些.IMA格式的数据都转成为常见的.png格式或者.jpg格式的图。方法如下&#xff1a; 因为这些数据都是以病例形式存在的&#xff0c;如下图&#xff0c;L067、L096...、…

PHPExcel导出网络图片(如果是微信图片需将微信图片转成正常的图片地址)

数据库的格式&#xff1a; 后台&#xff1a; 需求&#xff1a;将用户导到excel表中 //将用户导出到excel表中&#xff0c;并保存用户头像public function export(){$exportId json_decode(Request::param(exportId),true);//需要导出数据的id$exportS Db::name(member);//…

如何将微信电脑图片dat格式文件转换为jpg格式

电脑微信聊天过程中的图片文件格式为dat格式的文件&#xff0c;我们无法用普通的图片查看软件进行查看&#xff0c;那么如何将dat格式文件转换为jpg图片格式呢&#xff1f; 有办法&#xff0c;使用转换软件转换一下即可 首先点这里下载软件&#xff1a; 微信电脑版DAT图片格式…

微信DAT文件转JPG图片(图片恢复)

微信电脑版现在已经是日常工作生活必不可少的工具&#xff0c;有时候删除了聊天记录或者被系统清理软件清理了&#xff0c;但还想查看曾经的微信聊天图片。 这个时候辛辛苦苦找到了文件&#xff0c;却发现无法查看&#xff0c;因为微信电脑版为了保护我们的隐私&#xff0c;把…

微信电脑版聊天图片DAT格式转为普通JPG图片

微信是我们现在最常用的社交软件之一&#xff0c;它的功能越来越强大&#xff0c;我们的手机运行越来越慢。我们手机的运行内存越来越大的原因就是软件的功能越来越多&#xff0c;我们在使用这些功能的时候就会产生越来越多的无用垃圾&#xff0c;处理这种问题只有3种方法。 1.…

年度AI对话|达观陈运文:做私有部署的大模型,数据安全更具优势

本文内容来源于达观数据董事长兼CEO陈运文受邀出席36氪数字时氪的《年度AI对话》专栏采访内容 大模型既带来了压力&#xff0c;也带来了机会 文 | 杨俊 编辑 | 石亚琼 封面来源&#xff5c;企业官方 掌握了人工智能就掌握了新时代的生产力密码。在ChatGPT爆火的当下&#xff…

私有化运行大型语言模型 - 私有化的 GPT

目录 概述 Understanding the Privacy Challenge​了解隐私挑战 Potential Solutions to the Privacy Challenge​隐私挑战的潜在解决方案 Federated Learning​ 联邦学习 Homomorphic Encryption​ 同态加密

零基础,零成本,部署一个属于你的大模型

前言 看了那么多chatGPT的文章&#xff0c;作为一名不精通算法的开发&#xff0c;也对大模型心痒痒。但想要部署自己的大模型&#xff0c;且不说没有算法相关的经验了&#xff0c;光是大模型占用的算力资源&#xff0c;手头的个人电脑其实也很难独立部署。就算使用算法压缩后的…

Metabase可视化BI系统部署安装及简单使用

metabase 是国外开源的一个可视化系统&#xff0c;语言使用了Clojure TypeScript。 Clojure&#xff08;/ˈkloʊʒər/&#xff09;是Lisp程式語言在Java平台上的現代、動態及函數式方言。来自维基百科。 我也是第一次看到这个语言&#xff0c;知道它是可以运行在Java环境上的…

常用ChatGPT类模型的总结

做一个现在常用ChatGPT类模型的总结&#xff0c;后续会持续更新&#xff0c;大家如果有新的可以在评论里说 一、商用的&#xff08;不开源&#xff09;的&#xff1a; ChatGPT: https://chat.openai.com/ Claude: 可以参考我的这篇文章&#xff0c;北方的郎&#xff1a;Ant…

最新类ChatPDF及AutoGPT开源18大功能平台——闻达手把手超详细环境部署与安装——如何在低显存单显卡上面安装私有ChatGPT GPT-4大语言模型LLM调用平台

目录 前言闻达框架简介前期准备电脑要求安装anaconda安装相应版本的CUDA配置ChatGLM-6B Conda环境安装pytorch 类ChatPDF及AutoGPT开源模型——闻达环境部署及安装相关代码及模型下载解压模型到指定地址配置文件修改根据使用的不同模型&#xff0c;安装相关库运行体验运行chatG…

浅析ChatGPT:历史沿革、应用现状及前景展望

关注公众号&#xff0c;发现CV技术之美 浅析ChatGPT&#xff1a;历史沿革、应用现状及前景展望 刘禹良1&#xff0c;白翔1&#xff0c;金连文2 1华中科技大学人工智能与自动化学院 2华南理工大学电子与信息学院 人工智能已成为新一代信息时代的核心技术&#xff0c;广泛应用于多…

图灵奖得主、AI 教父、神经网络大师——谷歌副总裁 Hinton 离职——称其对毕生工作感到后悔和恐惧

图灵奖得主、AI 教父、神经网络大师——谷歌副总裁 Hinton 离职——称其对毕生工作感到后悔和恐惧 目录

谁是近期全世界最受瞩目的聊天对象?

在今天&#xff0c;答案有且仅有一个&#xff0c;那就是ChatGPT。 Chat GPT——可能很多人被这个冗长的名字搞糊涂了。说实话&#xff0c;我第一眼也看不出到底什么意思&#xff0c;看了英文原文&#xff0c; GPT就是Generative Pre-training Transformer&#xff08;预训练生…

ChatGPT一枪打服谷歌AI人才!情人节组团加盟OpenAI

金磊 梦晨 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT的号角一吹&#xff0c;连谷歌的顶尖AI人才都开始纷纷倒戈了&#xff01; 就在今天凌晨&#xff0c;前后仅半个小时功夫&#xff0c;就有2位谷歌大脑人才连夜宣布入盟OpenAI&#xff1a; 他们是Jason Wei和Hyung Won Chung…

ChatGPT 冲击下,特斯拉曾留不住的 AI 大牛,再次回归 OpenAI !

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 技术圈毕竟还是一个“圈”&#xff0c;兜兜转转都是会遇见。 半年前&#xff0c;特斯拉 AI 的中坚力量&#xff0c;即 AI 部门的主管 Andrej Karpathy 在给自己放了 4 个月的长假之后&#xff0c;选择离…

实测最像ChatGPT的中文产品:能解释三体、懂弱智吧的梗,内测开启人人都能试!...

明敏 发自 凹非寺量子位 | 公众号 QbitAI 最像ChatGPT的中文产品&#xff0c;出现了&#xff01; 昨晚&#xff0c;一个名叫Inspo的生成式对话AI&#xff0c;刚刚在“民间”开启内测&#xff0c;马上引发不小反响。 体验过的博主表示&#xff1a; 1分钟搞定3份策划&#xff0c;…

ChatGPT 有哪些 “激动人心的时刻“?以及自己的一些思考

文章目录 一、前言二、主要内容三、一些思考 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 近日&#xff0c;英伟达创始人兼 CEO 黄仁勋与 OpenAI 联合创始人及首席科学家伊尔亚-苏茨克维 (Ilya Sutskever) 展开了一次 “炉边谈话”。 黄…