如何将 -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 应用程序?