Docker在Azure Ubuntu 16.04虚拟机上卡Extracting阶段的排查咨询
排查Azure Ubuntu 16.04 VM上Docker拉取Postgres卡在Extracting阶段的问题
我来帮你梳理下可能的原因和对应的排查步骤,这种跨环境的Docker镜像解压卡住的问题,通常和资源、环境配置或者会话稳定性有关:
1. 优先排查资源瓶颈
Azure小规格VM(比如B1s、B1ms这类)的CPU、内存或磁盘IO很容易成为解压镜像的瓶颈,毕竟Postgres镜像解压后体积不小:
- 实时监控资源占用:用
htop(没装的话先执行apt install htop)查看CPU、内存使用率,解压阶段如果CPU跑满到100%或者内存接近耗尽,大概率会卡住。 - 检查磁盘空间:执行
df -h,确保Docker镜像存储目录(默认是/var/lib/docker)所在磁盘有足够剩余空间,至少要预留镜像大小2倍以上的空间。 - 查看磁盘IO负载:用
iostat 1或者iotop(需要apt install iotop),如果%util持续接近100%,说明磁盘IO跟不上,考虑升级VM磁盘规格或换用Premium SSD。
2. 检查Docker版本兼容性
Ubuntu 16.04默认仓库里的Docker版本非常老旧(比如1.12.x),而新版Postgres镜像可能依赖更高版本的Docker特性,导致解压异常:
- 查看当前Docker版本:
docker version - 升级Docker到稳定版:先卸载旧版本
apt remove docker docker-engine docker.io,再按照官方步骤安装最新的Docker CE(Ubuntu 16.04仍支持),安装完成后重启Docker服务service docker restart。
3. 确认是否是SSH会话超时导致的误判
有时候看起来是Docker卡住,其实是SSH会话超时断开了,而解压进程还在后台运行:
- 用
screen或tmux保持会话:安装apt install screen,执行screen后再运行docker pull,即使SSH断开,重新连接后执行screen -r就能回到会话查看进度。 - 修改SSH超时配置:编辑
/etc/ssh/sshd_config,调整ClientAliveInterval 30和ClientAliveCountMax 10,然后重启SSH服务service ssh restart,延长会话超时时间。
4. 排查存储驱动问题
Ubuntu 16.04默认的Docker存储驱动是aufs,这种驱动在解压大镜像时可能出现性能瓶颈或兼容性问题:
- 查看当前存储驱动:
docker info | grep "Storage Driver" - 切换到
overlay2驱动:创建或编辑/etc/docker/daemon.json,添加以下内容:
然后重启Docker服务{ "storage-driver": "overlay2" }service docker restart,注意切换前要备份好现有镜像,避免数据丢失。
5. 验证镜像完整性与网络问题
可能是镜像拉取不完整导致解压卡住,或者网络不稳定:
- 重新拉取镜像并禁用缓存:
docker pull --no-cache postgres:<指定版本>,比如postgres:14,尽量避免使用latest版本。 - 检查Docker网络连通性:用
docker run --rm busybox nslookup docker.io验证DNS解析是否正常,确保Azure VM的网络安全组没有限制对Docker Hub的访问。
内容的提问来源于stack exchange,提问作者rgwozdz
相关产品推荐
相关产品推荐

