设置 Java/JRE 可以被 JAVA_TOOL_OPTIONS 覆盖的默认设置
Set Java/JRE default settings which can be overridden by JAVA_TOOL_OPTIONS
我有多个 java spring 引导服务,它们在 docker 容器中 运行 并通过 docker-compose 配置。这些服务中的每一个都需要几个 java 配置,这些配置是通过 JAVA_TOOL_OPTIONS
在 docker-compose.yml 中完成的,例如:
my-service:
environment:
JAVA_TOOL_OPTIONS: -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof -XX:+ExitOnOutOfMemoryError
到目前为止这有效。我的想法是将此默认配置放入 Dockerfile
中,例如:
ENTRYPOINT ["java", "-Xmx256m", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof", "-XX:+ExitOnOutOfMemoryError", "-jar", "/my-service.jar"]
这也很好用。问题是,现在我无法使用 JAVA_TOOL_OPTIONS 覆盖 Dockerfile 中的那些选项。因此,例如,我无法通过在 docker-compose.yml 中配置来停用 ExitOnOutOfMemoryError
选项,例如:
my-service:
environment:
JAVA_TOOL_OPTIONS: -XX:-ExitOnOutOfMemoryError
甚至更改最大堆大小。是否有可能实现此行为(以便我将默认配置内置到图像中,但有可能覆盖 docker-compose 中的单个配置选项)?
最后我们这样解决了:
我们将对 jar 的调用移到了 docker-entrypoint.sh 中,并只对该 .sh 文件进行了调用。我们还添加了额外的环境变量来存储默认配置。
Dockerfile
ENV DEFAULT_JAVA_TOOL_OPTIONS="-Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof -XX:+ExitOnOutOfMemoryError"
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["/${project.build.finalName}.jar"]
并且在 docker-entrypoint.sh 中我们做了以下操作:
docker-entrypoint.sh
#!/bin/bash
JAVA_TOOL_OPTIONS="$DEFAULT_JAVA_TOOL_OPTIONS $JAVA_TOOL_OPTIONS"
java -jar ""
这样 JAVA_TOOL_OPTIONS 中设置的选项将处理默认选项
我有多个 java spring 引导服务,它们在 docker 容器中 运行 并通过 docker-compose 配置。这些服务中的每一个都需要几个 java 配置,这些配置是通过 JAVA_TOOL_OPTIONS
在 docker-compose.yml 中完成的,例如:
my-service:
environment:
JAVA_TOOL_OPTIONS: -Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof -XX:+ExitOnOutOfMemoryError
到目前为止这有效。我的想法是将此默认配置放入 Dockerfile
中,例如:
ENTRYPOINT ["java", "-Xmx256m", "-XX:+HeapDumpOnOutOfMemoryError", "-XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof", "-XX:+ExitOnOutOfMemoryError", "-jar", "/my-service.jar"]
这也很好用。问题是,现在我无法使用 JAVA_TOOL_OPTIONS 覆盖 Dockerfile 中的那些选项。因此,例如,我无法通过在 docker-compose.yml 中配置来停用 ExitOnOutOfMemoryError
选项,例如:
my-service:
environment:
JAVA_TOOL_OPTIONS: -XX:-ExitOnOutOfMemoryError
甚至更改最大堆大小。是否有可能实现此行为(以便我将默认配置内置到图像中,但有可能覆盖 docker-compose 中的单个配置选项)?
最后我们这样解决了:
我们将对 jar 的调用移到了 docker-entrypoint.sh 中,并只对该 .sh 文件进行了调用。我们还添加了额外的环境变量来存储默认配置。
Dockerfile
ENV DEFAULT_JAVA_TOOL_OPTIONS="-Xmx256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdumps/my-service.hprof -XX:+ExitOnOutOfMemoryError"
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["/${project.build.finalName}.jar"]
并且在 docker-entrypoint.sh 中我们做了以下操作:
docker-entrypoint.sh
#!/bin/bash
JAVA_TOOL_OPTIONS="$DEFAULT_JAVA_TOOL_OPTIONS $JAVA_TOOL_OPTIONS"
java -jar ""
这样 JAVA_TOOL_OPTIONS 中设置的选项将处理默认选项