【问题标题】:how to overwrite property files in a docker container?如何覆盖docker容器中的属性文件?
【发布时间】:2021-01-19 19:03:25
【问题描述】:

我有一个 docker 容器,里面有我的 springBoot 应用程序的 jar 文件。如何覆盖我的应用程序的 application.property 文件。假设如果我想更改数据源 url,我该如何通过命令行来做到这一点?

【问题讨论】:

  • 只是为了澄清,您只想执行一次还是将该命令作为某个自动化脚本的一部分?
  • 仅一次 ....以防我的属性之一更改 ....如 db url 或端口
  • 好吧,我写的答案应该可以了

标签: spring-boot docker deployment jar properties-file


【解决方案1】:
  1. 运行 docker ps 并记下容器 id 的首字母。
  2. 运行docker exec -it <id> <bash or sh>,您将进入正在运行的容器中。
  3. 转到您的 jar 目录。将您的属性文件作为 application.properties 放在 config/ 中。
  4. 重新运行您的应用,但请确保在后台执行此操作,以便您可以退出 docker。

您无法重新启动主进程 (PID 1)。对于该用例,您将需要外部卷并在属性文件更改时重新启动容器。

  1. 创建一个卷:docker volume create vol1,你会得到/var/lib/docker/volumes/vol1/
  2. 更改目录组sudo chgrp 1001 /var/lib/docker/volumes/vol1/_data
  3. 添加对组的写访问权限:sudo chmod g+w /var/lib/docker/volumes/vol1/_data
  4. 检查目录的权限:sudo ls -al /var/lib/docker/volumes/vol1/。他们应该是:drwxrwxr-x
  5. 下次运行容器时,将包含 jar 文件的文件夹挂载到卷中:docker run -d --name=webApp1 --mount source=vol1,destination=/path/to/app -p port:port name
  6. 您可以更改/var/lib/docker/volumes/vol1/_data/中的属性文件并重新启动容器:docker restart container_name

免责声明: 替换 jar 外部的属性文件不被认为是一种好的做法,强烈建议不要这样做。因此,这些步骤仅推荐用于测试。

【讨论】:

  • nohup java -jar myapp.jar --spring.config.location=classpath:application.properties,/app/override.propertie & ......我试过你的方式......但是以下命令对我没有帮助
  • 没有工作.....我试图替换 server.port 并且它对我没有工作......因为我试图重新运行 jar
  • 可以建议我为您工作的方式.....当尝试替换属性并在容器内重新运行应用程序时
  • @Mr.Fix,您可以在容器内执行ps -ef 并查看您最初运行的应用程序的进程ID吗?如果它是主要进程,则无法重新启动它。这对我来说是次要的。要使其适用于主要进程,您必须创建一个卷并将 jar 文件放在该卷中。入口点应该有命令读取 jar 外的配置文件。对于此设置,您只需为每个配置文件更改重新启动容器。
  • 这对我来说是主要的过程......这就是为什么我猜它对我不起作用......如果它是主要的......我需要遵循的确切步骤是什么
猜你喜欢
  • 2020-12-23
  • 2017-04-15
  • 1970-01-01
  • 2021-09-14
  • 2013-08-16
  • 2017-12-22
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多