Docker装载发生在入口点执行之前或之后
我正在构建一个Docker映像来运行基于Spring Boot的应用程序。我希望用户能够通过将包含application.properties的文件夹装载到容器中来提供运行时属性文件。这是我的DockerfileDocker装载发生在入口点执行之前或之后,docker,spring-boot,Docker,Spring Boot,我正在构建一个Docker映像来运行基于Spring Boot的应用程序。我希望用户能够通过将包含application.properties的文件夹装载到容器中来提供运行时属性文件。这是我的Dockerfile FROM java:8 RUN mkdir /app RUN mkdir /app/config ADD myapp.jar /app/ ENTRYPOINT ["java","-jar","/app/myapp.jar"] 当启动容器时,我运行这个 docker run -d
FROM java:8
RUN mkdir /app
RUN mkdir /app/config
ADD myapp.jar /app/
ENTRYPOINT ["java","-jar","/app/myapp.jar"]
当启动容器时,我运行这个
docker run -d -v /home/user/config:/app/config myapp:latest
其中/home/user/config
包含应用程序.properties
我希望jar文件在运行时拾取
但是,这不起作用,应用程序运行不会获取这个挂载的属性文件,它使用的是打包在jar中的默认属性文件。但是,当我exec
进入已启动的容器并再次手动运行entrypoint cmd时,它会按照预期的方式工作,即拾取我装入的文件。所以我想知道这是否与mount如何使用entrypoint有关?或者我只是没有为这种情况正确编写Dockerfile?Spring Boot forapplication.properties
位于当前目录(以及其他位置)的/config
子目录中。在您的情况下,当前目录是/
(docker默认),因此您需要将其更改为/app
。要做到这一点,请添加
WORKDIR /app
在入口点
行之前
为了回答您最初的问题:在运行容器中的任何内容之前都要进行装载。当您手动运行它时,您从哪个目录运行它<代码>/或
/app
?抱歉,回复太早。我想你的意思是,我应该在容器中运行exec
,对吗?我在/app
下运行它,所以我手动运行的cmd只是java-jar myapp.jar
哦,只是让它快速尝试在其他地方运行cmd,然后它就不用安装在配置中了。所以我想问题是我没有完全理解Spring Boot如何获取外部配置的用法。是的,只是这样做了,它就工作了。本应仔细阅读文档页面。非常感谢您的快速帮助!