Docker装载发生在入口点执行之前或之后

Docker装载发生在入口点执行之前或之后,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

我正在构建一个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 -v /home/user/config:/app/config myapp:latest
其中
/home/user/config
包含
应用程序.properties
我希望jar文件在运行时拾取

但是,这不起作用,应用程序运行不会获取这个挂载的属性文件,它使用的是打包在jar中的默认属性文件。但是,当我
exec
进入已启动的容器并再次手动运行entrypoint cmd时,它会按照预期的方式工作,即拾取我装入的文件。所以我想知道这是否与mount如何使用entrypoint有关?或者我只是没有为这种情况正确编写Dockerfile?

Spring Boot for
application.properties
位于当前目录(以及其他位置)的
/config
子目录中。在您的情况下,当前目录是
/
(docker默认),因此您需要将其更改为
/app
。要做到这一点,请添加

WORKDIR /app
入口点
行之前



为了回答您最初的问题:在运行容器中的任何内容之前都要进行装载。

当您手动运行它时,您从哪个目录运行它<代码>/或
/app
?抱歉,回复太早。我想你的意思是,我应该在容器中运行
exec
,对吗?我在
/app
下运行它,所以我手动运行的cmd只是
java-jar myapp.jar
哦,只是让它快速尝试在其他地方运行cmd,然后它就不用安装在配置中了。所以我想问题是我没有完全理解Spring Boot如何获取外部配置的用法。是的,只是这样做了,它就工作了。本应仔细阅读文档页面。非常感谢您的快速帮助!