对于第一种情况,我关注了一篇博客文章,建议在build.sbt文件中添加Java和Docker插件,如下所示:
enablePlugins(JavaAppPackaging)
enablePlugins(DockerPlugin)
dockerBaseImage := "openjdk:8"
dockerEntrypoint := Seq("bin/test", "-Denv=dev")
但是,它似乎构建了一个不稳定的映像,容器无法启动并显示错误:
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:148)
at play.core.server.ProdServerStart$.start(ProdServerStart.scala:46)
at play.core.server.ProdServerStart$.main(ProdServerStart.scala:30)
at play.core.server.ProdServerStart.main(ProdServerStart.scala)
有人可以帮助我解决这个问题或使用 Dockerfile 代替。
我设法使用 Dockerfile 弄清楚;我在根目录中编写了一个 Dockerfile,使用docker build
命令
FROM openjdk:8-jdk
#Add build artifacts into stage dir
ADD target/universal/stage stage
EXPOSE 9000
CMD ["stage/bin/play2_app", "-Dplay.http.secret.key=abcdef12345"]
然后生成映像:
$ docker build -t play2-test-app:v1 .
在本地运行 docker 镜像
$ docker run -d --name play2-test-container -p 9000:9000 [images id]
首先,通过列出所有正在运行的容器来确保容器正在运行:
$ docker ps
在浏览器上查看您的应用程序:
localhost:9000