InvalidImage(ImageLayerFailure:使用 AWS CDK 部署 AWS Docker Lambda 时检测到 UnsupportedImageLayer

问题描述 投票:0回答:1

我有几个使用 python AWS CDK 部署的 Docker Lambda。我收到此错误:

Lambda function XXX reached terminal FAILED state due to
InvalidImage(ImageLayerFailure: UnsupportedImageLAyerDetected - Layer 
Digest sha256: XXX) and failed to stabilize

我们使用

cdk deploy
进行部署,并且我的团队在使用相同的 Dockerfile 部署相同的 lambda 时不会遇到这样的问题。所以我相信它必须与我当地的环境有关?

我使用的是 Macbook M3,所以我的 .zshrc 中有

export DOCKER_DEFAULT_PLATFORM='linux/amd64'
。无论 AWS 中是否已存在堆栈,我都会收到此错误。

我们有点困惑,所以任何想法将不胜感激。谢谢

amazon-web-services docker aws-lambda
1个回答
0
投票

您遇到的错误 UnsupportedImageLayerDetected 表示 AWS Lambda 运行时无法处理 Docker 映像中的一层或多层。这通常与架构兼容性或基础镜像层的不匹配有关。 由于您使用的是 M3 MacBook(ARM 架构),但强制使用 DOCKER_DEFAULT_PLATFORM='linux/amd64',因此层的构建方式可能仍然存在差异,特别是当 Docker 设置处理模拟的方式存在问题时。

使用以下命令清除 Docker 缓存:

docker system prune -a
并尝试通过添加平台在 CDK 部署过程中显式设置平台:

lambda.DockerImageFunction(
    self, 'MyLambdaFunction',
    code=lambda.DockerImageCode.from_image_asset('path_to_your_docker', 
        platform='linux/amd64')
)

如果本地模拟存在问题并引入无效层,AWS CDK 将使用您的本地 docker 环境来构建和推送映像。不管你如何构建,它都会引起问题。 你可以使用这个命令:

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

确保 QEMU(用户空间模拟器)在 Docker 中正确设置并将其配置为支持跨平台模拟。

© www.soinside.com 2019 - 2024. All rights reserved.