【问题标题】:How to use docker task with a sbt multi project如何使用带有SBT多项目的Docker任务
【发布时间】:2017-07-04 13:52:22
【问题描述】:

我有一个 SBT 多项目,其中有 2 个不同的播放应用程序。 我想创建 2 个 docker 输出而不仅仅是 1 个。

在我的 build.sbt 文件中,我有一些 docker 设置,但是当我运行 docker 任务时,它不使用任何这些设置,因为 DockerFile 没有我配置的任何东西。

我的 build.sbt 看起来像:

lazy val project1 = (project in file("project1")).
      ..
      .enablePlugins(...., DockerPlugin)

lazy val project2 = (project in file("project2")).
      ..
      .enablePlugins(...., DockerPlugin)


// docker
maintainer in Docker := "mr. docker"

dockerExposedPorts := Seq(9000)

dockerBaseImage := "java:latest"

我首先进入我的特定项目来运行任务:

project project2
docker:stage

在target/docker/Dockerfile中生成的docker文件是:

FROM java:latest
WORKDIR /opt/docker
ADD opt /opt
RUN ["chown", "-R", "daemon:daemon", "."]
USER daemon
ENTRYPOINT ["bin/project1"]
CMD []

如您所见,它缺少我在 build.sbt 中放入的内容。它应该有维护者和暴露端口的线路。

我该如何解决这个问题?

【问题讨论】:

标签: scala docker playframework sbt-native-packager


【解决方案1】:

必须为每个子项目设置 Docker 设置:

lazy val server = Project("server")
  .enablePlugins(DockerPlugin)
  .settings(dockerBaseImage := "openjdk:8-jdk")
  .settings(dockerRepository := Some("registry.gitlab.com"))
  .settings(dockerExposedPorts := Seq(8080))

如上定义项目,您可以使用以下命令发布 docker 镜像:

sbt server/docker:publishLocal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 2015-08-11
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多