如何在 sbt 多项目中使用 docker 任务

How to use docker task with a sbt multi project

我有一个 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 的内容。它应该有维护者和公开端口的行。

我该如何解决这个问题?

Docker 设置必须按照 sub-project:

进行设置
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