You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,添加以下内容:
    {
      "storage-driver": "overlay2"
    }
    
    然后重启Docker服务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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:21:10