弹簧系统参数被忽略
问题描述:
我创建了我的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
答
系统变量是在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
你确定的环境变量没有被解决,如果你改变你的入口点线是什么输出:'入口点回声java -jar /dockertest.jar -Djava.security.egd = file:/ dev /./ urandom -Dserver.port = $ port' – BMitch
你是对的。我只知道jvm忽略了我的'-Dserver.port'运行时参数。 – xetra11