从docker文件传递Java程序参数



我正在尝试使用Docker ENV变量将端口传递到集群中的节点,如

FROM openjdk:8-jre
COPY /target/ReadingNode-1.0-SNAPSHOT.jar ReadingNode-1.0-SNAPSHOT.jar
ENV my_env_var = "9100"
ENTRYPOINT ["java","-jar","ReadingNode-1.0-SNAPSHOT.jar","$my_env_var"]

并使用以下命令运行它:

docker run -p 9140:9140 -e my_env_var=9140  readingnode 

问题是java应用程序不从ENV变量中获取值,它将ENV变量本身(就像字符串一样)

java.lang.NumberFormatException: For input string: "$my_env_var"

I tried doing this

ARG port
ENV port $port

也不工作

我试着像这样使用ENTRYPOINT:

ENTRYPOINT ["sh","-c","java","-jar","ReadingNode-1.0-SNAPSHOT.jar","$port"]

也不工作,我得到:

Usage: java [-options] class [args...]
(to execute a class)
or  java [-options] -jar jarfile [args...]
(to execute a jar file)

我尝试使用CMD而不是像这样的ENTRYPOINT

CMD ["sh","-c","java","-jar","ReadingNode-1.0-SNAPSHOT.jar","$port"]

就像上面那样

,

cmd "java -jar ReadingNode-1.0-SNAPSHOT.jar $port"

出现错误:

/bin/sh: 1: java -jar ReadingNode-1.0-SNAPSHOT.jar 9140: not found

也试过

RUN ["java","-jar","ReadingNode-1.0-SNAPSHOT.jar","$port"]

我不想使用run命令,但是它很奇怪地这样做:

> [3/3] RUN ["java","-jar","ReadingNode-1.0-SNAPSHOT.jar","1414"]:
#7 0.604 Exception in thread "main" java.lang.NumberFormatException: For input string: "$port"

它从命令中获得正确的输入,但是它将$port发送给Java应用程序。我不知道这里发生了什么。

那么我是如何修复它的:首先我从

更改了Java图像
FROM openjdk:8-jre

FROM openjdk:8

我将ENTRYPOINT更改为"非json";入口点,即

ENTRYPOINT java -jar ReadingNode-1.0-SNAPSHOT.jar $port

最新更新