【问题标题】:Docker mount happens before or after entrypoint executionDocker 挂载发生在入口点执行之前或之后
【发布时间】:2016-07-19 22:32:09
【问题描述】:

我正在构建一个 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?

【问题讨论】:

  • 手动运行时,从哪个目录运行? //app?
  • 抱歉回复太早了。我猜你的意思是我在exec 之后在哪里运行到容器中,对吗?我是在/app下运行的,所以我手动运行的cmd就是java -jar myapp.jar
  • 哦,只是快速尝试在其他地方运行 cmd,然后它没有使用安装在配置中。所以我想问题是我没有完全理解 Spring Boot 如何获取外部配置的用法。

标签: docker spring-boot


【解决方案1】:

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

WORKDIR /app

ENTRYPOINT 行之前。


并回答您最初的问题:在容器内的任何内容运行之前完成安装。

【讨论】:

  • 是的,刚刚做到了,它可以工作。应该更仔细地阅读文档页面。非常感谢您的快速帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多