1

我正在使用基本示例在 Ubuntu 上构建 lambda。它的构建没有任何错误,但是如果我在崩溃时在 aws 上上传和测试它:

{
  "errorMessage": "RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b Error: Runtime exited with error: exit status 1",
  "errorType": "Runtime.ExitError"
}

日志输出为:

START
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Version: $LATEST.~.jwtauthorizeraws.jwtauthorizerawsapplication: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by ./~.jwtauthorizerawsapplication)
END 
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
REPORT
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Duration: 56.02 ms
Billed Duration: 57 ms
Memory Size: 128 MB
Max Memory Used: 7 MB   
RequestId: 7f4d0aca-125c-4032-98dd-9ff387e5252b
Error: Runtime exited with error: exit status 1
Runtime.ExitError
4

3 回答 3

4

这可能意味着用于构建可执行文件的 glibc 版本与 docker 环境使用的不同。

因此,检查构建环境“ldd --version”将显示 glibc 版本。

现在,在您的 docker 容器(docker run -ti --entrypoint=/bin/bash dockerimage:tag)中输入相同的 ldd 命令。您可能会看到版本不同。因此,更新构建环境以使用与 docker 环境相同的版本,反之亦然。

避免这种情况的最佳方法是使用运行时环境来构建您的本机可执行文件:这样 glibc 版本将始终匹配。

于 2021-07-02T19:06:30.910 回答
1

FWIW,在 Quarkus 中,我们有一个称为容器内构建的功能,它允许在与我们使用的运行时映像兼容的容器内创建您的本机映像。

使用-Dquarkus.native.container-build=true使它发生。

并不是说您应该迁移到 Quarkus,但如果您想构建原生镜像,您确实需要在与您的运行时环境兼容的环境中构建它们,因此您最终将不得不在容器中构建。

于 2021-01-15T11:16:46.333 回答
0

您正在执行的环境似乎没有在 2.32 版中提供 Glibc 版本。

这可能有几个问题:您的 Lambda 环境版本较旧,或者它根本不提供 GlibC(可能是这种情况)。

如果您的应用程序是纯 Java(不通过 graal 创建本机应用程序),它将运行,因为 Java 应用程序本身不依赖于 GLibC 版本,因此要求来自本机应用程序。

于 2020-12-08T11:06:32.383 回答