弹簧系统参数被忽略

我创build了我的Dockerfile,在那里我想创build一个简单的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 Docker插件启动Docker容器我给它的参数:

port=555

运行docker inspect bootapp (bootapp是容器名称)给我以下有关端口环境variables和入口点的信息:

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

和Spring Boots日志说这个:

 2017-08-30 20:10:07.709 INFO 5 --- [main] sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 666 (http) 

因此, application.properties中定义的端口不会被运行时参数覆盖。

这告诉我, EXPOSE=$port实际上是能够解决,但ENTRYPOINTvariables不是。

我已经将ENTRYPOINT更改为shellforms,但没有帮助,因为您可以通过我的Dockerfile看到

java执行命令中的系统variables是错误的。 它必须放在-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