弹簧系统参数被忽略
我创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