我想在Dockerfile中启动一个play framework 2应用程序。
让我们假设我的play项目位于ubuntu的/ myapp目录中。 当我手动启动时,我只想说:
cd /myapp
sbt run
如何从Dockerfile的CMD命令运行sbt run
?
运行sbt run
必须来自/ myapp目录。如何告诉CMD命令应该从该目录运行sbt run
?
答案 0 :(得分:13)
仔细研究新实验docker feature 对于sbt-native-packager。
您应该可以通过几个简单的步骤从Play应用程序构建一个docker容器。 添加维护者和暴露的端口
import NativePackagerKeys._ // with auto plugins this won't be necessary soon
name := "play-2.3"
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayScala)
scalaVersion := "2.11.1"
libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws
)
// setting a maintainer which is used for all packaging types
maintainer := "Nepomuk Seiler"
// exposing the play ports
dockerExposedPorts in Docker := Seq(9000, 9443)
然后运行
sbt docker:publishLocal
docker run -p 9000:9000 play-2-3:1.0-SNAPSHOT
使用sbt-native-packager 1.x(以及播放2.4.x)默认情况下启用docker(因为play启用了JavaServerAppPackaging
插件)。
如果您没有播放应用程序,请使用
启用dockerenablePlugins(JavaAppPackagingPlugin)
maintainer := "Nepomuk Seiler"
// note that the Docker scope is gone!
dockerExposedPorts := Seq(9000, 9443)
答案 1 :(得分:1)
您可以连接两个语句:
FROM ubuntu
... more Dockerfile commands...
CMD cd /myapp && sbt run
您还可以使用Dockerfiles的WORKDIR
命令(请参阅http://docs.docker.io/reference/builder/#workdir)来设置CMD命令的工作目录。但我从来没有用过这个(没有特别的理由......):
FROM ubuntu
... more Dockerfile commands...
WORKDIR /myapp
CMD sbt run