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

使用容器镜像部署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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:04:59