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

How to pass -mem to dockerized Play application

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

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

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

抱歉,我不是 scala 用户,不知道如何将其应用于 sbt/activator/play 生成器,尽管 the dockerCommands section here seems relevant, also this Codacy blog post.

Let’s override the dockerComands in our build.sbt by adding:

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) }
}

我进一步查看了 sbt-native-packager 文档,并在 Recipes 下找到了一个关于 Play 的部分。实现这一点的不太令人困惑(无论如何对我来说)的方法是添加:

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