首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用环境变量配置Lagom Scala应用程序的Docker部署

使用环境变量配置Lagom Scala应用程序的Docker部署
EN

Stack Overflow用户
提问于 2020-01-23 19:39:55
回答 2查看 566关注 0票数 0

我们正在开发几个基于Lagom的Scala微服务。它们是使用application.conf中的变量替换来配置的,例如。

代码语言:javascript
复制
mysql = {
  url = "jdbc:mysql://"${?ENV_MYSQL_DATABASE_URL}

在开发过程中,我们通过一个调用System.setProperty("ENV_MYSQL_DATABASE_URL", url)env.sbt文件将这些变量设置为Java System Properties。这工作得很好。

现在,我想将其部署到本地Docker安装的容器中。我们使用SbtReactiveAppPluginbuild.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中使用环境变量?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 22:20:01

多年来,我一直使用Lightbend配置通过docker容器中的环境变量来配置Lagom服务,所以我知道这是可以做到的,并且在我的经验中非常简单。

考虑到这一点,当你说application.conf没有使用它们时,你的意思是它们是未设置的吗?请注意,除非将非常特定的选项作为Java属性传递,否则configuration.getString("ENV_MYSQL_DATABASE_URL")不会从环境变量中读取数据,因此检查这一点不会告诉您mysql.url是否受环境变量的影响。configuration.getString("mysql.url")将让您更好地了解正在发生的事情。

我怀疑实际上您的Docker映像是用硬编码的dev-mode属性构建的,而且由于Java系统属性优先于其他所有属性,所以它们隐藏了环境变量。

您可能会发现,按照以下方式构建application.conf非常有用:

代码语言:javascript
复制
mysql_database_url = "..."   # Some reasonable default default for dev-mode
mysql_database_url = ${?ENV_MYSQL_DATABASE_URL}

mysql {
  url = "jdbc://"${mysql_database_url}
}

在这种情况下,您为开发人员提供了一个合理的默认值(可能在文档中包含了一些以与该配置兼容的方式运行MySQL的说明)。然后,可以通过设置Java属性(例如JAVA_OPTS=-Dmysql_database_url)或通过设置ENV_MYSQL_DATABASE_URL环境变量来覆盖默认值。

票数 0
EN

Stack Overflow用户

发布于 2020-01-24 01:20:45

虽然我同意Levi Ramsey提供的答案,但我建议您使用typesafe's config加载您的配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59877729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档