
说真的,都已经到2026年了,难道还会因为docker pull出现超时情况而摔键盘吗?
跨国的链路,拥堵程度犹如早晚高峰那般,而数据合规的那条红线,恰似高悬于头顶之上,就在那一刻,内心之中真真切切地想把这糟糕透顶的镜像给活生生地吞咽下去。
其实换个思路,咱不跟网络较劲。
把镜像当成一个“压缩包”去对待,你会发现新大陆。
打包:save 是你最好的朋友
别老想着在线硬刚。
在你那网络顺畅的小窝里,先把镜像伺候好了。
比如说,那个让人嫌恶至极的nginx ,运用docker save ,将其 enwrapped成为tar包。
发出,将,名为nginx且为最新版本的镜像,保存成,一个,名为nginx.tar的文件,此操作,通过,docker save -o这一系列指令。
看着进度条跑完,心里瞬间踏实。
这就是你的“种子”,是你的诺亚方舟。
传输:别只用 scp,试试 ssh 管道魔法
文件太大?
传半天?
scp 虽然稳,但也慢。
试试直接在 ssh 管道里玩点花的,省去中间步骤:
将名为myapp的应用程序的最新版本,通过docker save命令保存,然后对保存的内容进行gzip压缩,接着通过ssh连接到用户为user的目标机,从标准输入中读取经gzip压缩后的内容,先执行ungzip解压缩,再执行docker load来加载该内容。
这条命令下达之后,那一边的镜像会直接完成加载,本地连一个临时文件都不会留存下来。
是不是有点帅?
大文件传输的土办法
固然,要是目标机器属于那种物理隔离的“孤岛”情形,那么U盘始终会是你最为忠诚的伙伴,这是毫无疑问的。
记住,当完成传输后要计算一下md5,不然要是文件损坏导致导入失败,那时你就会想狠狠抽打自己了。
md5sum nginx.tar
落地:load 进来,但别高兴太早
抵达新的环境之后,执行docker load -i nginx.tar这个操作,然后就完成了。
但等等。
运行 docker images 看一眼。
有时候,你会发觉,镜像名字消失不见了,仅仅剩下一串光秃秃的image ID,仿佛是一个无人疼爱的孤儿。
别慌,这是 save 的时候没把名字带全。
手动 docker tag 一下就行。
还有一处容易出问题的地方,multi - arch这种类型的镜像嘛,在save这个环节极其容易遭遇挫败,会出现报错是那种“not found”的错误的情形。
在这个特定时刻,切勿使用名字去进行保存操作,而是直接运用 image ID 来实施保存行为,如此这般,方可挽救你的一条性命。
避坑指南:血与泪的教训
1. 权限梦魇
执行 docker load 提示权限不足?
sudo 伺候。
但每次都 sudo 烦不烦?
通过执行,sudo usermod -aG docker $USER这一串字符,将用户添加进docker组里,而后退出,再重新进行登录。
记住了,不加组,寸步难行。
2. 压缩的艺术
几百兆的 tar 包,还有甚至上 G 的 tar 包,不进行压缩就直接传,难道你是家里有矿产资源吗?
gzip 快,体积还行;xz 慢,但压缩率高得吓人 。
看情况选,别傻乎乎直接传原包。
3. 增量同步
在你所要去进行传输的是一整个目录的镜像包的情形下,或者是要去同步整个 /var/lib/docker 的状况下,rsync 相较于 scp 要聪明上一百倍。
断点续传,只传改动部分,这才是生产环境该有的样子 。
将名为nginx.tar的文件,通过rsync工具,以递归、详细、保护时间戳并保留权限的方式,传送给用户user,传输至IP地址为192.168.1.100的主机上,存放于/home/user/目录下。
说到底,docker pull 不过是平常的操作,然而 save 和 load 这一套连贯动作,才是那让你于网络废墟之上再次构建起秩序的信心所在。
别等超时了才后悔。
现在,就去把你最常用的几个镜像打成包,存好吧。

Comments NOTHING