通过docker-compose将JAVA_OPTS传递给Spring Boot副本

时间:2018-12-14 19:09:27

标签: spring-boot docker-compose spring-boot-docker-plugin

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

Dockerfile

https://cdn.syndication.twimg.com/timeline/profile?screen_name=TwitterDev

docker-compose

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"]

2 个答案:

答案 0 :(得分:1)

更仔细地查看了错误之后,我找到了解决方案。如果将来有人需要,请在此处发布。

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /my.jar"]

答案 1 :(得分:1)

您不应将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_OPTIONS项目使用jib-more here