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

AWS EC2构建Golang Docker镜像卡在apk安装步骤问题排查

Docker构建Alpine阶段apk安装卡顿解决方案

卡顿出现在apk update执行完成、开始安装依赖包的阶段,本地构建正常、EC2实例突发故障且未修改Dockerfile/项目文件时,按以下优先级排查修复:

1. 优先排查Docker网桥MTU不匹配问题(最高发)

AWS EC2 VPC默认弹性网卡开启巨型帧,MTU值为9001,但Docker默认网桥MTU为1500,apk拉取软件包时出现数据包分片丢失,会直接卡住无任何报错输出。

  • 验证方式:在EC2实例直接执行测试命令,如果同样卡住即可确认问题:
    docker run --rm alpine apk add --no-cache git
    
  • 修复步骤:
    • 编辑Docker daemon配置文件:vi /etc/docker/daemon.json
    • 写入配置将Docker网桥MTU设置为1450(避开VPC分片阈值):
      {
        "mtu": 1450
      }
      
    • 重启Docker服务生效:systemctl restart docker
    • 重新执行docker build .即可正常构建。

2. 排查apk包下载链路异常

apk update能成功拉取索引文件,不代表后续包下载链路正常:

  • 先修改Dockerfile中的apk执行命令,开启verbose日志定位具体卡住的环节:
    RUN apk update -v && apk add -v --no-cache git make gcc libc-dev
    
  • 如果日志显示固定包下载超时,直接在apk命令前替换为EC2实例所在区域的内部软件源,走内网拉取包即可避免公网链路波动问题。

3. 排查基础资源问题

  • 执行df -h检查EC2实例磁盘剩余空间,Docker构建目录所在分区剩余空间不足3G时,会出现写入假死无报错的情况,清理冗余镜像/文件释放空间即可。
  • 执行docker info | grep "Storage Driver"检查存储驱动,如果为devicemapper且是loop模式,属于老版本Docker的默认配置,存在IO卡顿bug,升级Docker到20.10以上版本、使用默认的overlay2存储驱动即可修复。

临时规避方案

如果需要紧急发布,可先在本地PC完成镜像构建,推送到镜像仓库后在EC2实例直接拉取镜像部署,无需在EC2侧执行构建流程,待网络问题排查完成后再恢复EC2构建能力。


内容的提问来源于stack exchange,提问作者Marcos Federico Mandrille

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:57:37