GCR镜像推送速度异常缓慢,寻求解决方案
gcloud docker -- push performance on Ubuntu 16.04 with Jenkins (gcloud 197.0.0) 我之前帮团队排查过类似的问题,不少人在使用旧版本gcloud的docker --push命令时都遇到过推送速度异常慢的情况,尤其是在Jenkins这类CI环境里。结合你的场景(Ubuntu 16.04、gcloud 197.0.0),可以从这几个方向排查和解决:
优先升级gcloud版本:gcloud 197.0.0是2019年左右的旧版本,Google后续在容器推送的性能优化上做了不少改进,包括镜像分层传输效率提升、连接复用优化等。你可以在Jenkins节点上执行
sudo gcloud components update升级到最新稳定版,很多用户升级后推送速度直接恢复正常。检查镜像分层是否重复推送:有时候看似只改了CMD,但如果Dockerfile的构建上下文里有未被
.dockerignore排除的变动文件,可能会导致底层分层被重新构建和推送。建议检查你的.dockerignore文件,确保把Jenkins工作目录里的临时文件、日志、依赖缓存(比如node_modules、venv等)都排除在外,避免不必要的分层变更。替换为
gcloud auth configure-docker+原生docker push:旧版的gcloud docker --push是封装原生docker命令的旧方式,Google现在更推荐用gcloud auth configure-docker配置Docker认证,然后直接用docker push推送,这种方式能避免gcloud封装层带来的性能损耗。步骤很简单:- 在Jenkins构建脚本里先执行
gcloud auth configure-docker --quiet - 然后直接运行
docker push gcr.io/[PROJECT_ID]/[IMAGE]:[TAG]
- 在Jenkins构建脚本里先执行
检查Jenkins节点的网络环境:如果升级和换命令都没改善,可能是Jenkins服务器的网络问题。比如代理配置错误、网络带宽被其他任务占用,或者到GCR的网络链路不稳定。可以在节点上测试到GCR的连通性,比如用
curl -v https://gcr.io查看响应速度,或者临时手动在节点上执行推送命令,对比CI环境和手动操作的速度差异,排查是否是Jenkins的资源限制导致的。
另外,我身边确实有几个朋友在使用gcloud 19x版本时遇到过类似的推送慢问题,大多是升级gcloud或者换用原生docker push解决的。你可以先试试升级版本,这是成本最低的排查步骤。
内容的提问来源于stack exchange,提问作者Nick van der Meij

