【发布时间】:2020-05-09 16:13:46
【问题描述】:
我们正在开发几个基于 Lagom 的 Scala 微服务。它们是在 application.conf 中使用变量替换配置的,例如。
mysql = {
url = "jdbc:mysql://"${?ENV_MYSQL_DATABASE_URL}
在开发过程中,我们通过调用System.setProperty("ENV_MYSQL_DATABASE_URL", url) 的env.sbt 文件将这些变量设置为Java 系统属性。这工作正常。
现在我想在一个容器中将它部署到我的本地 Docker 安装。我们使用SbtReactiveAppPlugin 从build.sbt 构建Docker 映像并简单地运行sbt Docker/publishLocal。这按预期工作,创建了一个 Docker 映像,我可以启动它。
但是,使用标准 docker 或 docker-compose 机制传入环境变量似乎不起作用。虽然我可以看到在 Docker 容器内正确设置了环境变量(在 bash 上使用 env 进行验证,也通过在服务内执行 log.debug("ENV_MYSQL_DATABASE_URL via env: " + sys.env("ENV_MYSQL_DATABASE_URL")) 进行验证),但 application.conf 不使用它们并且在配置系统。值为空/未设置(通过configuration.getString("ENV_MYSQL_DATABASE_URL").toString()验证以及mysql系统和其他系统抛出的异常)。
我让它工作的唯一方法是通过JAVA_OPTS=-D ENV_MYSQL_DATABASE_URL=.... 将其添加到JAVA_OPTS 中。但是,这似乎是一种 hack,并且对于几十个环境参数似乎不能很好地扩展。
我是否遗漏了什么,有没有办法轻松使用 Lagom 应用程序和 application.conf 中的环境变量?
谢谢!
【问题讨论】: