使用容器镜像部署Serverless Lambda时遇镜像媒体类型不支持错误
解决AWS Lambda镜像媒体类型不支持问题
问题背景
更新Docker后,使用serverless deploy部署Python函数时出现错误:The image manifest or layer media type for the source image <>.dkr.ecr.us-east-1.amazonaws.com/serverless-serverless-lab-dev@sha256:## is not supported.
已确认镜像未采用多架构配置,且在serverless.yml中指定了platform: linux/amd64,但报错持续。
核心原因
Docker更新后默认生成OCI格式的镜像manifest或层媒体类型,而AWS Lambda仅支持Docker V2 Manifest Format 2(application/vnd.docker.distribution.manifest.v2+json),格式不匹配导致部署失败。
解决方案
1. 构建时强制指定Docker V2格式
修改serverless.yml的镜像配置,添加buildOptions参数强制使用Docker兼容格式:
service: serverless-lab provider: name: aws ecr: scanOnPush: true images: appimage: path: ./ file: Dockerfile buildArgs: provenance: "false" platform: linux/amd64 buildOptions: - "--manifest-type=application/vnd.docker.distribution.manifest.v2+json" iam: role: arn:aws:iam::<>role/serverlessRole functions: first_function: image: name: appimage command: - handler.lambda_handler
2. 调整Docker守护进程配置
如果上述方法无效,修改Docker daemon配置文件(通常为/etc/docker/daemon.json),禁用OCI媒体类型默认设置:
{ "features": { "oci-media-types": false } }
修改后重启Docker服务:
sudo systemctl restart docker
3. 验证镜像格式合规性
用以下命令检查镜像媒体类型,确保输出包含application/vnd.docker.distribution.manifest.v2+json:
docker inspect <你的镜像ID> | grep -A 5 "MediaType"
4. 清理旧镜像重新部署
删除本地及ECR中的旧镜像,避免缓存干扰,再重新部署:
# 删除本地镜像 docker rmi <你的镜像名称> # 删除ECR中的旧镜像 aws ecr batch-delete-image --repository-name <你的ECR仓库名> --image-ids imageTag=<镜像标签> # 重新部署 serverless deploy
内容的提问来源于stack exchange,提问作者Tanaya Sharma
相关产品推荐
相关产品推荐

