gpt4 book ai didi

java - 通过 docker-compose 将 JAVA_OPTS 传递给 spring boot 应用程序

转载 作者:行者123 更新时间:2023-12-03 18:30:49 58 4
gpt4 key购买 nike

我正在使用以下配置创建一个 docker 图像。图像准备好后,我想将 JAVA_OPTS 传递给我的 docker 容器,以便它可以传递给我的 Spring Boot 应用程序。每当我尝试启动容器时,我都会收到“运行时创建失败:container_linux.go:348:启动容器进程导致”exec:\“java $JAVA_OPTS\”:在 $PATH 中找不到可执行文件“:未知”错误。我错过了什么吗?任何帮助真的很感激

文件

FROM openjdk:8-jdk-alpine

LABEL maintainer="myname@test.com"

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8080 available to the world outside this container
EXPOSE 8080

# The application's jar file
ARG JAR_FILE=target/my.jar

# Add the application's jar to the container
ADD ${JAR_FILE} my.jar

ENV JAVA_OPTS=""
# Run the jar file
ENTRYPOINT ["java $JAVA_OPTS","-Djava.security.egd=file:/dev/./urandom","-jar","/my.jar"]

docker-compose
version: '2.1'
services:
service1:
hostname: test
domainname: mydomain.com
image: myimage:latest
container_name: test-container
environment:
- JAVA_OPTS=-Dapp.clients.scheme=http -Dapp.clients.port=9096 -Dserver.port=8082
ports:
- "8082:8082"

最佳答案

你不应该使用 java $JAVA_OPTSENTRYPOINT ["sh", "-c", "java $JAVA_OPTS"]
它的主要问题是,使用这种方法,您的应用程序将不会收到 sigterm,因此在正常关闭的情况下,它对您不起作用(如果您不知道,您会找到有关问题的更多信息 here)

如果您想在 docker 环境中自定义 java 选项,请使用 JAVA_TOOL_OPTIONS环境属性 ( https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html ) 和 ENTRYPOINT ["java", ...]
使用此属性,您甚至可以在 Dockerfile 中声明您的预期选项,例如:

ENV JAVA_TOOL_OPTIONS "-XX:MaxRAMPercentage=80"

您可以稍后使用外部提供的 docker 或 kubernetes 属性轻松覆盖它。
JAVA_TOOL_OPTIONSjib 使用项目 - more here

关于java - 通过 docker-compose 将 JAVA_OPTS 传递给 spring boot 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53785577/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com