使用Python AWS CDK部署Docker Lambda时遭遇InvalidImage错误求助
针对你在Mac M3上部署Docker Lambda遇到的UnsupportedImageLayerDetected错误,以下是针对性的排查和解决步骤:
确认Docker平台配置生效
先运行docker info | grep Platform,检查输出的默认平台是否为linux/amd64。再执行echo $DOCKER_DEFAULT_PLATFORM,如果没有输出linux/amd64,说明.zshrc的配置没加载,执行source ~/.zshrc后重启终端再验证。在CDK中显式指定构建平台
全局环境变量可能没被CDK的Docker构建流程继承,直接在CDK代码里给镜像构建指定平台:from aws_cdk import aws_lambda as lambda_ lambda_code = lambda_.DockerImageCode.from_image_asset( "./your-docker-dir-path", platform="linux/amd64" )或者手动构建镜像时强制指定平台:
docker build --platform linux/amd64 -t lambda-image .,再让CDK使用该本地镜像部署。清理本地Docker缓存与旧镜像
M3的ARM架构可能残留了ARM架构的镜像层,导致混合架构镜像上传到Lambda(仅支持x86_64)。执行以下命令彻底清理:docker system prune -a docker builder prune -a清理完成后重新构建镜像再部署。
修正Dockerfile的基础镜像指定
确保Dockerfile的基础镜像明确指定x86_64架构,避免拉取ARM版本:FROM --platform=linux/amd64 python:3.11-slim # 后续构建步骤...验证构建后镜像的架构
构建完成后,运行docker inspect your-lambda-image | grep Architecture,确认输出为"Architecture": "amd64"。如果显示arm64,说明构建流程仍在使用本地ARM架构,回到前面的步骤排查。确认CDK部署时的环境变量传递
部署前先执行echo $DOCKER_DEFAULT_PLATFORM && cdk deploy,确保输出linux/amd64后再执行部署,避免环境变量未传递导致的架构错误。
内容的提问来源于stack exchange,提问作者noname

