Dockerize Play2-Scala 应用程序的最佳方法是什么?



对于第一种情况,我关注了一篇博客文章,建议在build.sbt文件中添加JavaDocker插件,如下所示:

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

相关内容

最新更新