如何将 -mem 传递给 dockerized Play 应用程序

Posted

技术标签:

【中文标题】如何将 -mem 传递给 dockerized Play 应用程序【英文标题】:How to pass -mem to dockerized Play application 【发布时间】:2017-06-17 09:47:34 【问题描述】:

我正在使用 Play! 2.5.当我运行我的应用程序时,我使用 -mem 4000 运行它。如何将此选项发送到我使用 activator docker:publish 创建的 Docker 映像?我查看了activator show dockerCommands 指定的命令,我看到 ENTRYPOINT 是 bin/myappname - 我可以编辑它以添加 -mem 4000 吗?还是我需要使用-Xmx 和-Xms?我是否将这些选项放在其他地方?我看到了一些对 application.ini 文件的引用,但我不确定将其放在 Play! 应用程序的哪个位置。

【问题讨论】:

【参考方案1】:

在带有ENTRYPOINT 的普通Dockerfile 中,您可以使用CMD 来指定传递给入口点命令的选项。

ENTRYPOINT ["bin/myappname"]
CMD [ "-mem", "4000" ]

对不起,我不是 scala 人,不知道如何将其应用于 sbt/activator/play 生成器,尽管 the dockerCommands section here 似乎相关,this Codacy blog post 也是如此。

让我们覆盖 build.sbt 中的 dockerComands,添加:

dockerCommands := dockerCommands.value.flatMap
  case cmd@Cmd(“FROM”,_) => List(cmd, Cmd(“RUN”, “apk update && apk add bash”))
  case other => List(other) 

可能

dockerCommands := dockerCommands.value.flatMap
  case cmd@ExecCmd("ENTRYPOINT",_) => List(cmd, ExecCmd("CMD", """[ "-mem", "4000" ]"""))
  case other => List(other) 

【讨论】:

【参考方案2】:

我进一步浏览了 sbt-native-packager 文档,并在“食谱”下找到了有关 Play 的部分。实现这一点的不那么令人困惑(无论如何对我来说)的方法是添加:

    javaOptions in Universal ++= Seq(
      // JVM memory tuning
     "-J-Xmx4000m",
     "-J-Xms512m"
    )

【讨论】:

是的,这是向应用程序添加 JVM 参数的推荐方式

以上是关于如何将 -mem 传递给 dockerized Play 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量从 docker-compose 传递给项目?

如何将环境变量传递给 mongo docker-entrypoint-initdb.d?

如何将 JAVA_OPTS 传递给 docker 容器中的 tomcat?

如何将 application.properties 传递给 Docker 容器中的 Spring Boot 应用程序?

将DOCKER_OPTS传递给Daemon.json.j2

我应该如何使用 P/Invoke 将字符串数组传递给 C 库?