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