2

对于上下文,我正在构建一个编译为 GraalVM 本机映像的 Java 应用程序,该映像在 Kubernetes 中的无发行版 docker映像上运行。

我一直在尝试做一些相当简单的事情并碰壁:我想通过-XmxNNN. 为此,我想用来运行应用程序的选项将保存在环境变量中。问题的出现是由于使用了 distroless 映像 - 它没有 bash,因此ENTRYPOINT /application $OPTIONS不起作用。

是否有 GraalVM 本身支持的环境变量,或任何其他设置方式?

我不想:

4

2 回答 2

1

我不确定它是否会起作用,但您可以尝试将环境变量设置JAVA_TOOL_OPTIONS为所需的值:

JAVA_TOOL_OPTIONS=-XmxNNN

文档中:

此环境变量允许您指定工具的初始化,特别是使用 -agentlib 或 -javaagent 选项启动本机或 Java 编程语言代理。在以下示例中,环境变量被设置,以便在应用程序启动时启动 HPROF 分析器:

$ export JAVA_TOOL_OPTIONS="-agentlib:hprof"

此变量还可用于使用其他选项扩充命令行以用于诊断目的。例如,您可以提供 -XX:OnError选项来指定发生致命错误时要执行的脚本或命令。

GraalVM文档本身也提供了一个使用示例,尽管在不同的上下文中。

于 2021-11-28T18:41:40.690 回答
1

您可以使用busybox在 distroless 容器中获取外壳:

FROM gcr.io/distroless/base

...

COPY --from=amd64/busybox:1.31.1 /bin/busybox /busybox/busybox
RUN ["/busybox/busybox", "--install", "/bin"]

CMD ["/bin/sh", "-c", "java -version"]

Dockerfile 您可以在此处找到此类示例。

但我认为不需要这个busybox shell。

AltoughENTRYPOINT /application $OPTIONS不起作用,这将起作用ENTRYPOINT ["myapp", "arguments"]

请注意,默认情况下 distroless 映像不包含 shell。这意味着 Dockerfile ENTRYPOINT 命令在定义时必须以向量形式指定,以避免容器运行时以 shell 为前缀。

来源:github

于 2021-11-28T19:18:29.900 回答