java - 如何在没有 shell 扩展的情况下在 JVM 启动选项中使用环境变量
问题描述
我想使用环境变量来设置-XX:HeapDumpPath
JVM 启动选项。此外,我希望它在 Docker 容器中工作,并且我的 JVM 进程获得 PID 1。这似乎使这个问题中提出的所有解决方案对我的情况都无效。
我目前的解决方案如下所示:
Dockerfile
FROM openjdk:10 COPY . . ENTRYPOINT [ "./start.sh" ]
启动.sh
#!/usr/bin/env bash exec java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${HEAP_DUMP_PATH} -jar build/libs/app.jar
如果我使用它构建它docker build --tag=test .
然后运行它,CID=$(docker run --rm -e HEAP_DUMP_PATH="/tmp" -d test) && docker exec $CID ps -f
我会得到:
UID PID PPID C STIME TTY TIME CMD
根 1 0 0 16:18 ?00:00:00 java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -jar build/libs/app.jar
root 21 0 0 16:18?00:00:00 ps -f
所以它似乎正在工作。但这似乎也不必要地复杂。有没有更好/更清洁的方法来实现这一目标?
更新-c
:中删除exec -c
。