无法在基于 Alpine 的 Docker 容器中运行 Play 框架应用程序

Posted

技术标签:

【中文标题】无法在基于 Alpine 的 Docker 容器中运行 Play 框架应用程序【英文标题】:Unable to run Play framework app in Alpine-based Docker container 【发布时间】:2018-09-16 15:35:57 【问题描述】:

我有一个在默认(由 sbt 提供)docker 基础映像上运行的 Play 应用程序。我想将此应用程序切换为基于 Alpine 的图像。

根据sbt-native-packager docs,我添加了

enablePlugins(AshScriptPlugin)
dockerBaseImage := "openjdk:8-jre-alpine"

到我的build.sbt 文件。当我尝试运行此容器时,出现以下错误:

bin/foo-service: line 51: /opt/docker/lib/foo-service.foo-service-1.0.40-launcher.jar: Permission denied
bin/foo-service: line 56: is_cygwin: not found
Unrecognized option: -J-Xms512M
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

【问题讨论】:

【参考方案1】:

跟踪此问题已经存在。问题是由于在 bash 脚本附加内容中添加了一些不符合 ash 的内容。

https://github.com/sbt/sbt-native-packager/issues/1118

建议的一种解决方法 (https://github.com/sbt/sbt-native-packager/issues/978#issuecomment-313393423) 是将其添加到您的 build.sbt

bashScriptExtraDefines := List(
    """addJava "-Duser.dir=$(realpath "$(cd "$app_home/.."; pwd -P)")""""
)

【讨论】:

以上是关于无法在基于 Alpine 的 Docker 容器中运行 Play 框架应用程序的主要内容,如果未能解决你的问题,请参考以下文章

基于alpine java的docker容器查看堆栈信息

为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”

「容器架构」Debian和 Alpine作为基准Docker映像的对比

Go 编译的二进制文件不会在 Ubuntu 主机上的 alpine docker 容器中运行

无法在 Jenkins 管道的 docker 容器中运行 jasmine 测试用例

在 Docker Alpine 上安装 numpy