我正在尝试使用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