My project builds just fine using sbt docker:publish
or sbt docker:publishLocal
, but when I go to run the image, it fails with the following stack trace:
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$
The image is public on DockerHub under eholley/opendar:1.0-SNAPSHOT. (In the run command, I have omitted a couple of environment variables, so the expected output should be that it fails on configuration based on the application.conf instead of the above error.)
If you want to try to build and package it yourself, you can clone https://[email protected]/0x00F3/opendar.git.
The issue isn't altogether dissimilar to this issue, so as a shot in the dark I tried adding this
import com.typesafe.sbt.packager.docker.DockerChmodType
dockerChmodType := DockerChmodType.UserGroupWriteExecute
per the advice in the thread. It didn't appear to change anything.
What we will do first is create a working Java Play web application, install Docker, set up Docker for use, and finally create a runtime environment within it with our own specifications. Then, we will build an image of the application and run it in a container.
I had to add both:
build.sbt
Universal / javaOptions ++= Seq(
"-Dpidfile.path=/dev/null"
)
conf/application.conf
play.server.pidfile.path=/dev/null
This problem is noted and has a few issues on various repositories on github https://github.com/lightbend/sbt-reactive-app/issues/177
You can either point the pid file to /dev/null like some otheres suggest or if you are using later versions of sbt native packager you can set the permissions for the docker user via the sbt setting
dockerChmodType := DockerChmodType.UserGroupWriteExecute
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With