无法在基于 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 框架应用程序的主要内容,如果未能解决你的问题,请参考以下文章
为 Spring Boot 应用程序基于“openjdk:8-jdk-alpine”构建 docker 映像时无法运行“./mvnw clean install”
「容器架构」Debian和 Alpine作为基准Docker映像的对比
Go 编译的二进制文件不会在 Ubuntu 主机上的 alpine docker 容器中运行