在运行时将外部配置文件传递给 docker 容器
pass external config file to docker container at runtime
我有一个 scala sbt 应用程序并且有一个默认 application.conf。
我通过 docker 为 运行 这个应用程序构建了一个 docker 图像。
如何在 运行 次替换 docker 容器中的默认 application.conf
?
docker run ... \
--volume=[[YOUR-HOST-PATH]]/application.conf:[[YOUR-IMAGE-PATH]]/application.conf
...
我建议不要传递带有覆盖的 application.conf
文件,而是使用基于环境变量的覆盖,原因如下:
- 从部署工具的角度来看,使用配置文件安装卷可能很棘手;
- 并非所有配置管理工具(例如 HashiCorp Consul)都提供 HOCON 支持,但管理环境变量几乎是一个标准。特别是如果它包含需要保护的秘密;
所以,您可以执行以下操作:
在您的应用程序 conf 设置中通过环境变量覆盖:
foo=default
foo={?FOO}
和运行应用程序docker具有特定覆盖的容器:
docker run ...
-e foo=bar \
...
详情请看:
- HOCON
Optional system or env variable overrides
: https://github.com/lightbend/config#optional-system-or-env-variable-overrides
- 运行 docker 带有环境变量的容器:https://docs.docker.com/engine/reference/run/#env-environment-variables
希望对您有所帮助!
我有一个 scala sbt 应用程序并且有一个默认 application.conf。
我通过 docker 为 运行 这个应用程序构建了一个 docker 图像。
如何在 运行 次替换 docker 容器中的默认 application.conf
?
docker run ... \
--volume=[[YOUR-HOST-PATH]]/application.conf:[[YOUR-IMAGE-PATH]]/application.conf
...
我建议不要传递带有覆盖的 application.conf
文件,而是使用基于环境变量的覆盖,原因如下:
- 从部署工具的角度来看,使用配置文件安装卷可能很棘手;
- 并非所有配置管理工具(例如 HashiCorp Consul)都提供 HOCON 支持,但管理环境变量几乎是一个标准。特别是如果它包含需要保护的秘密;
所以,您可以执行以下操作: 在您的应用程序 conf 设置中通过环境变量覆盖:
foo=default
foo={?FOO}
和运行应用程序docker具有特定覆盖的容器:
docker run ...
-e foo=bar \
...
详情请看:
- HOCON
Optional system or env variable overrides
: https://github.com/lightbend/config#optional-system-or-env-variable-overrides - 运行 docker 带有环境变量的容器:https://docs.docker.com/engine/reference/run/#env-environment-variables
希望对您有所帮助!