【问题标题】:How to pass -mem to dockerized Play application如何将 -mem 传递给 dockerized Play 应用程序
【发布时间】: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! 应用程序的哪个位置。
【问题讨论】:
标签:
docker
playframework-2.0
sbt-native-packager
【解决方案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"
)