我正在构建一个 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
包含 application.properties
我希望在运行时获取 jar 文件。
但是这不起作用,应用程序运行不会获取这个已安装的属性文件,它使用的是打包在 jar 中的默认文件。但是当我 exec
进入启动的容器并再次手动运行入口点 cmd 时,它通过获取我安装的文件按预期工作。所以我想知道这是否与 mount 的工作方式有关入口点?或者我只是没有为这种情况正确编写 Dockerfile?
最佳答案
Spring Boot searches application.properties
位于当前目录(以及其他位置)的/config
子目录中。在您的情况下,当前目录是 /
(docker 默认值),因此您需要将其更改为 /app
。为此,添加
WORKDIR /app
在 ENTRYPOINT
行之前。
并回答您最初的问题:在运行容器内的任何内容之前完成安装。
关于Docker 挂载发生在入口点执行之前或之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38469569/