Java 如何将外部应用程序属性传递给docker容器中的springboot应用程序

Java 如何将外部应用程序属性传递给docker容器中的springboot应用程序,java,docker,spring-boot,application.properties,Java,Docker,Spring Boot,Application.properties,请告诉我,我已经读过一些帖子,这些帖子似乎是针对这个问题的,但我仍然无法解决我的问题。我的spring boot应用程序中有一个默认的application.properties在docker容器中运行,但是我想添加外部application.properties 这是我的docker文件: FROM tomcat:8-alpine COPY target/demoapp.war /usr/local/tomcat/webapps/demo.war RUN sh -c 'touch /usr/l

请告诉我,我已经读过一些帖子,这些帖子似乎是针对这个问题的,但我仍然无法解决我的问题。我的spring boot应用程序中有一个默认的application.properties在docker容器中运行,但是我想添加外部application.properties

这是我的docker文件:

FROM tomcat:8-alpine
COPY target/demoapp.war /usr/local/tomcat/webapps/demo.war
RUN sh -c 'touch /usr/local/tomcat/webapps/demo.war'
EXPOSE 8080
ENTRYPOINT [ "sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar /usr/local/tomcat/webapps/demo.war", "--spring.config.location=C:/Users/650/Documents/Workplace/application.properties"]
我使用以下内容构建文件:

docker build . -t imagename
我运行spring boot docker容器时使用:

docker run -p 8080:8080 -v C:/Users/650/Documents/Workplace/application.properties:/config/application.properties --name demosirs --link postgres-
standalone:postgres -d imagename

容器仍然找不到我的外部应用程序。属性,请说明如何克服此难题?

您指的是docker
ENTRYPOINT
命令中的主机路径。只需参考特定于容器的路径:

入口点[“sh”、“-c”、“java-Djava.security.egd=file:/dev//uradom-jar/usr/local/tomcat/webapps/demo.war”、“--spring.config.location=/config/application.properties”]

我注意到,您正在使用文件作为
-v
参数的值来运行
docker
。因此,将其更改为相应的目录:

-vc:/Users/650/Documents/Workplace:/config


您指的是docker
ENTRYPOINT
命令中的主机路径。只需参考特定于容器的路径:

入口点[“sh”、“-c”、“java-Djava.security.egd=file:/dev//uradom-jar/usr/local/tomcat/webapps/demo.war”、“--spring.config.location=/config/application.properties”]

我注意到,您正在使用文件作为
-v
参数的值来运行
docker
。因此,将其更改为相应的目录:

-vc:/Users/650/Documents/Workplace:/config


您可以尝试给出文件路径而不是类路径

 "--spring.config.location=file:${configDirectory}/application.yml"
您可以使用SpringCloudConfig项目


您可以尝试给出文件路径而不是类路径

 "--spring.config.location=file:${configDirectory}/application.yml"
您可以使用SpringCloudConfig项目


在入口点传递另一个参数


-Dspring.config.location=

在入口点中传递另一个参数


-Dspring.config.location=

感谢您的更正,但是容器仍然没有拾取外部application.properties文件。如何验证容器没有拾取它?你看到日志了吗?如果是,请将它们附加到您的问题中。另外,我注意到,您正在
war
文件上调用
java-jar
。如果
demo.war
是作为web存档构建的,那么它将在tomcat容器中运行,而不是作为java应用程序运行。在这种情况下,您可能需要调用start-tomcat.sh或类似的东西。如果您想使用它的嵌入式容器运行演示应用程序,那么我想您可能会在
target
目录中有一个自包含的可执行jar。您似乎在跟踪:。注意,那里的可执行文件是app.jar
not
war
,我可以验证容器是否没有选择属性,因为我的数据库属性在里面,当容器运行时,它会抛出与数据库连接相关的错误。此外,我能够构建,如果我没有将application.properties外部化,则使用完全相同的Dockerfile执行并运行demo.war文件。如果我将application.properties放在项目中,它会工作得很好。感谢您的更正,但是容器仍然没有拾取external application.properties文件。您如何验证容器没有拾取它?你看到日志了吗?如果是,请将它们附加到您的问题中。另外,我注意到,您正在
war
文件上调用
java-jar
。如果
demo.war
是作为web存档构建的,那么它将在tomcat容器中运行,而不是作为java应用程序运行。在这种情况下,您可能需要调用start-tomcat.sh或类似的东西。如果您想使用它的嵌入式容器运行演示应用程序,那么我想您可能会在
target
目录中有一个自包含的可执行jar。您似乎在跟踪:。注意,那里的可执行文件是app.jar
not
war
,我可以验证容器是否没有选择属性,因为我的数据库属性在里面,当容器运行时,它会抛出与数据库连接相关的错误。此外,我能够构建,如果我没有将application.properties外部化,则使用完全相同的Dockerfile执行并运行demo.war文件。如果我将application.properties放在项目中,它会工作得很好。谢谢