【发布时间】:2023-03-03 08:44:31
【问题描述】:
我正在尝试使用 sbt-native-packager 生成我的 Scala 播放应用程序的 Docker 映像,我按照http://www.scala-sbt.org/sbt-native-packager/formats/docker.html 中描述的步骤进行操作
这是我的配置:
在我的 plugins.sbt 上,我添加了 sbt native packager 的依赖项:
// SBT Native
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.1")
在我的 build.sbt 中,我添加了 Universal 和 Docker 的插件:
.enablePlugins(PlayScala, JavaAppPackaging)
我还添加了一些额外的属性:
javaOptions in Universal ++= Seq(
// JVM memory tuning
"-J-Xmx1024m",
"-J-Xms512m",
// Since play uses separate pidfile we have to provide it with a proper path
// name of the pid file must be play.pid
s"-Dpidfile.path=/var/run/${packageName.value}/play.pid",
// Use separate configuration file for production environment
s"-Dconfig.file=/usr/share/${packageName.value}/conf/production.conf",
// Use separate logger configuration file for production environment
s"-Dlogger.file=/usr/share/${packageName.value}/conf/logback.xml"
)
// exposing the play ports
dockerExposedPorts in Docker := Seq(9000, 9443)
然后我使用插件和 SBT CLI 生成 docker 镜像:
docker:publishLocal
dockerfile 在 ./target/docker/Dockerfile 生成
当我检查我看到的文件时:
FROM openjdk:latest
WORKDIR /opt/docker
ADD opt /opt
RUN ["chown", "-R", "daemon:daemon", "."]
USER daemon
ENTRYPOINT ["bin/root"]
CMD []
它似乎不包含运行应用程序的所有必要步骤,当我使用docker build . 时,我得到:
java.nio.file.NoSuchFileException: /var/run/root/play.pid
似乎 Dockerfile 缺少一些应该 mkdir /var/run/{APP_NAME}/ 的步骤
(* 在 docker 容器实例中创建文件夹)
并 chown 该文件夹以便播放创建 PID 文件。
如何解决上述错误?
【问题讨论】:
标签: scala docker playframework dockerfile sbt-native-packager