EC2 linux/arm64实例Docker升级后构建报错:frontend grpc server意外关闭
解决Docker BuildKit构建报错"frontend grpc server closed unexpectedly"(EC2 linux/arm64环境)
问题背景
在EC2 linux/arm64实例上升级Docker到25.0.3后,执行以下构建命令:
DOCKER_BUILDKIT=1 docker build --ssh default -f ../containers/api/Dockerfile . -t api-test:latest --target setup
出现报错:
ERROR: failed to solve: frontend grpc server closed unexpectedly
当前Docker环境版本信息:
- Client:
- Version: 25.0.3
- API version: 1.44
- Go version: go1.20.12
- Git commit: 4debf41
- Built: Wed Feb 28 00:29:45 2024
- OS/Arch: linux/amd64
- Context: default
- Server: Engine:
- Version: 25.0.3
- API version: 1.44 (minimum version 1.24)
- Go version: go1.20.12
- Git commit: f417435
- Built: Wed Feb 28 00:30:22 2024
- OS/Arch: linux/amd64
- Experimental: false
- containerd:
- Version: 1.3.2
- GitCommit: ff48f57fc83a8c44cf4ad5d672424a98ba37ded6
- runc:
- Version: 1.0.0-rc10
- GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
- docker-init:
- Version: 0.19.0
- GitCommit: de40ad0
同一构建命令在M2 Mac的Docker 26.1.4(build 5650f9b)环境下可正常执行。
解决方案
1. 升级containerd版本
当前使用的containerd 1.3.2版本过旧,与Docker 25.0.3存在兼容性问题,Docker 25.x系列推荐搭配containerd 1.7+版本使用:
- 停止Docker服务:
sudo systemctl stop docker - 卸载旧版containerd:
sudo apt remove -y containerd.io - 安装适配版本(以1.7.18为例):
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg echo "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list sudo apt update sudo apt install -y containerd.io=1.7.18-1 - 配置containerd并启用SystemdCgroup:
sudo containerd config default | sudo tee /etc/containerd/config.toml sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml - 重启服务:
sudo systemctl start containerd sudo systemctl start docker
2. 升级Docker至与Mac环境一致的版本
既然Docker 26.1.4在M2 Mac上可正常运行,直接将EC2上的Docker升级到同版本:
- 卸载当前Docker:
sudo apt remove -y docker-ce docker-ce-cli containerd.io - 安装Docker 26.1.4:
sudo apt update sudo apt install -y docker-ce=5:26.1.4-1~ubuntu.$(lsb_release -rs)~$(lsb_release -cs) docker-ce-cli=5:26.1.4-1~ubuntu.$(lsb_release -rs)~$(lsb_release -cs) containerd.io - 验证版本:
docker --version
3. 临时禁用BuildKit验证
若暂时无法升级,可先禁用BuildKit测试构建是否正常:
docker build --ssh default -f ../containers/api/Dockerfile . -t api-test:latest --target setup
如果构建成功,说明问题确实源于BuildKit与当前环境的兼容性,优先执行前两个升级方案。
4. 重置BuildKit状态
清理BuildKit缓存并重启服务,排除配置异常:
sudo rm -rf /var/lib/docker/buildkit sudo systemctl restart docker
内容的提问来源于stack exchange,提问作者i.am.it
相关产品推荐
相关产品推荐

