在使用 jar 构建的 Docker 设置中在部署时传递 application.conf 文件

Pass application.conf file at deploy time in Docker setup built using jar

我的要求是在部署时在 Kubernetes 上的 Docker 设置中为基于 Play 框架的 Scala 应用程序传递 application.conf 文件,以支持使用 secrets 传递的值。但是,我的限制是我使用应用程序的 fat-jar 作为 Docker 文件中的入口点:

...
EXPOSE 9000
ENTRYPOINT java -jar myapp.jar

我想参考 application.conf 构建 fat-jar,它将在部署时传递(使用机密),使用 SBT 命令,例如:

sbt -Dconfig.file="/opt/myorg/myapp/application.conf" clean publish

但这会失败,因为该文件仅在部署时可用。我怎样才能做到这一点?

您应该更改您的部署,以便容器从某处获取此文件或更改获取所需属性的方法。 例如:

  • 你可以执行 ssh/scp 命令将文件复制到容器中并由 k8s 支持,因为默认情况下它会 shuffle/recreate 集群中的容器(这是一个糟糕的解决方案,但你可以从中得到启发)
  • 您可以将带有此文件的外部卷附加到容器,然后将路径传递给 java 进程。类似的东西应该工作 ENTRYPOINT java -jar myapp.jar -Dconfig.file="/opt/myorg/myapp/application.conf".
  • 在构建时将配置作为文件添加到 jar(但据我了解,构建时并非如此)
  • 更改您的应用获取属性的方式,以便它可以从 env 变量中获取它们,并在部署过程中定义 env

我不是k8s用户,所以我不能告诉你具体的做法。但我希望其中的一些可以帮助你。