弹簧系统参数被忽略

问题描述:

我创建了我的Dockerfile,我想创建一个简单的Spring Boot Webapp监听端口。弹簧系统参数被忽略

FROM java:8 
VOLUME /tmp 
ENV port=123 
#WORKDIR /workdir 
ADD /target/docker-test-0.1.jar dockertest.jar 
EXPOSE $port 
RUN bash -c 'touch /dockertest.jar' 
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom -Dserver.port=$port","-jar","/dockertest.jar"] 
ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd=file:/dev/./urandom -Dserver.port=$port 

我的webapps application.properties定义如下:

server.port=666 

开始通过的IntelliJ泊坞窗插件我的搬运工容器我给它的参数:

port=555

运行docker inspect bootapp (bootapp是容器名称)给我关于th的信息E端口,环境变量和入口点:

"Entrypoint" : [ "/bin/sh", "-c", "java -jar /dockertest.jar -Djava.security.egd=file:/dev/./urandom -Dserver.port=$port" ], 
    "Env" : [ "port=555", ...], 

,春靴日志这样说:

2017-08-30 20:10:07.709 INFO 5 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 666 (http) 

所以在application.properties定义的端口不是由运行参数覆盖。

这告诉我,EXPOSE=$port实际上能够解决,但ENTRYPOINT中的变量不是。

我已经变的入口点到外壳形式,但这并没有帮助,你可以看到通过我的Dockerfile

+0

你确定的环境变量没有被解决,如果你改变你的入口点线是什么输出:'入口点回声java -jar /dockertest.jar -Djava.security.egd = file:/ dev /./ urandom -Dserver.port = $ port' – BMitch

+0

你是对的。我只知道jvm忽略了我的'-Dserver.port'运行时参数。 – xetra11

系统变量是在Java执行命令有错误的地方。 它必须放在-jar选项之前。

错误

ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd=file:/dev/./urandom -Dserver.port=$port 

ENTRYPOINT java -Dserver.port=$port -jar /dockertest.jar -Djava.security.egd=file:/dev/./urandom