如何覆盖Docker容器中的属性文件?

问题描述

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

解决方法

  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之外替换属性文件不被认为是一种好习惯,强烈建议不要这样做。因此,仅建议将这些步骤用于测试。