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

时间:2019-05-15 15:38:29

标签: docker playframework sbt sbt-native-packager

问题

我的项目使用sbt docker:publishsbt 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$ 

要复制

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

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

我尝试过的

问题与this issue完全不同,因此,我尝试在黑暗中拍摄这张照片

import com.typesafe.sbt.packager.docker.DockerChmodType
dockerChmodType := DockerChmodType.UserGroupWriteExecute

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

背景

  • 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 Framework 2.6.20版

2 个答案:

答案 0 :(得分:1)

我必须同时添加两个:

build.sbt

javaOptions in Universal ++= Seq(
  "-Dpidfile.path=/dev/null"
)

conf / application.conf

play.server.pidfile.path=/dev/null

答案 1 :(得分:1)

这个问题已经注意到,并且在github的各个存储库中都有一些问题 https://github.com/lightbend/sbt-reactive-app/issues/177

您可以像其他建议一样将pid文件指向/ dev / null,或者如果您正在使用更高版本的sbt本机打包程序,则可以通过sbt设置为docker用户设置权限

dockerChmodType:= DockerChmodType.UserGroupWriteExecute