为什么我的 Play Framework for Scala 应用程序的 Docker 映像不以 AccessDeniedException 开头?

Ele*_*ley 8 sbt playframework docker sbt-native-packager

问题

我的项目使用sbt docker:publishor构建得很好sbt docker:publishLocal,但是当我去运行图像时,它失败并显示以下堆栈跟踪:

eleanor@demo-machine:~/workbench/opendar/opendar$ docker run eholley/opendar:1.0-SNAPSHOT
Oops, cannot start the server.
java.nio.file.AccessDeniedException: /opt/docker/RUNNING_PID
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
        at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
        at java.nio.file.Files.newOutputStream(Files.java:216)
        at play.core.server.ProdServerStart$.createPidFile(ProdServerStart.scala:136)
        at play.core.server.ProdServerStart$.start(ProdServerStart.scala:43)
        at play.core.server.ProdServerStart$.main(ProdServerStart.scala:25)
        at play.core.server.ProdServerStart.main(ProdServerStart.scala)
eleanor@demo-machine:~/workbench/opendar/opendar$ 
Run Code Online (Sandbox Code Playgroud)

再现

该图像在 DockerHub 上的 eholley/opendar:1.0-SNAPSHOT 下是公开的。(在运行命令中,我省略了几个环境变量,因此预期的输出应该是基于 application.conf 的配置失败,而不是上述错误。)

如果你想尝试自己构建和打包,可以克隆https://0x00F3@bitbucket.org/0x00F3/opendar.git

我试过的

这个问题与这个问题并不完全不同,所以作为在黑暗中的一个镜头,我尝试添加这个

import com.typesafe.sbt.packager.docker.DockerChmodType
dockerChmodType := DockerChmodType.UserGroupWriteExecute
Run Code Online (Sandbox Code Playgroud)

根据线程中的建议。它似乎没有改变任何东西。

背景

  • Ubuntu 版本 18.04.2 LTS
  • Java版openjdk 1.8.0_191
  • sbt 版本 1.2.1
  • Scala 版本 2.12.6
  • sbt-native-packager 版本 1.3.21
  • Play 框架版本 2.6.20

Jam*_*ard 7

我不得不添加两者:

生成.sbt

javaOptions in Universal ++= Seq(
  "-Dpidfile.path=/dev/null"
)
Run Code Online (Sandbox Code Playgroud)

配置文件/应用程序.conf

play.server.pidfile.path=/dev/null
Run Code Online (Sandbox Code Playgroud)