我有一个多项目的SBT / Play2应用程序,我需要为主项目发布一个Docker镜像(聚合其他项目)。
问题是sbt-native-packager
在我的本地仓库中发布了所有PLAY项目的图像。根图像工作正常,但我还有2张图像不应该发布。
我在plugins.sbt
中添加了什么addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-RC1")
这是我的build.sbt
import Dependencies.Library._
import PlayKeys._
import com.typesafe.sbt.packager.docker._
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.enablePlugins(DockerPlugin)
.settings(
packageName in Docker := "docking-station",
version in Docker := "latest",
NativePackagerKeys.dockerBaseImage := "dockerfile/java:oracle-java8",
NativePackagerKeys.dockerExposedPorts := Seq(9000, 9443),
NativePackagerKeys.dockerExposedVolumes := Seq("/opt/docker/logs"),
)
.dependsOn(module1).aggregate(module1)
.dependsOn(module2).aggregate(module2)
.dependsOn(core).aggregate(core)
lazy val module1 = (project in file("modules/1"))
.enablePlugins(PlayScala)
.dependsOn(core)
.dependsOn(entities)
lazy val module2 = (project in file("modules/2"))
.enablePlugins(PlayScala)
.dependsOn(core)
lazy val core = (project in file("modules/core"))
这就是我得到的
sbt docker:publishLocal
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docking-station latest 0d81792dd1ff 2 seconds ago 873.3 MB
module1 0.0.1 6d73e3623d2c 3 seconds ago 810.3 MB
module2 0.0.1 c847913663c2 3 seconds ago 809.9 MB
您知道如何配置sbt-native-packager
不为这些子项目发布图像吗?
感谢您的帮助:)
答案 0 :(得分:8)
我也遇到了这个问题,这里的解决方案对我有用。如果您查看sbt documentation,则可以看到每个任务都有一个聚合设置。因此,您只需将docker任务的聚合设置为false。像这样:
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.enablePlugins(DockerPlugin)
.settings(
packageName in Docker := "docking-station",
version in Docker := "latest",
NativePackagerKeys.dockerBaseImage := "dockerfile/java:oracle-java8",
NativePackagerKeys.dockerExposedPorts := Seq(9000, 9443),
NativePackagerKeys.dockerExposedVolumes := Seq("/opt/docker/logs"),
)
.dependsOn(module1).aggregate(module1)
.dependsOn(module2).aggregate(module2)
.dependsOn(core).aggregate(core)
.settings(
aggregate in Docker := false
)
答案 1 :(得分:0)
还必须指定dockerRepository
才能发布到私人仓库。
lazy val dockerSettings = {
val dockerRegistry = "docker.dev.orgul.io"
Seq(
dockerBaseImage := dockerRegistry + "/java-alpine:latest",
dockerRepository := Some(dockerRegistry),
...