回答我自己的問題,以下工作:
enablePlugins(JavaAppPackaging, DockerPlugin)
assemblyMergeStrategy in assembly := {
case x => {
val oldStrategy = (assemblyMergeStrategy in assembly).value
val strategy = oldStrategy(x)
if (strategy == MergeStrategy.deduplicate)
MergeStrategy.first
else strategy
}
}
// Remove all jar mappings in universal and append the fat jar
mappings in Universal := {
val universalMappings = (mappings in Universal).value
val fatJar = (assembly in Compile).value
val filtered = universalMappings.filter {
case (file, name) => !name.endsWith(".jar")
}
filtered :+ (fatJar -> ("lib/" + fatJar.getName))
}
dockerRepository := Some("username")
import com.typesafe.sbt.packager.docker.{Cmd, ExecCmd}
dockerCommands := Seq(
Cmd("FROM", "username/spark:2.1.0"),
Cmd("WORKDIR", "/"),
Cmd("COPY", "opt/docker/lib/*.jar", "/app.jar"),
ExecCmd("ENTRYPOINT", "/opt/spark/bin/spark-submit", "/app.jar")
)
我完全覆蓋泊塢窗命令,因爲默認添加夫妻,我不需要,因爲我覆蓋入口點以及腳本。另外,默認的工作目錄是/opt/docker
,這不是我想放置胖罐子的地方。 請注意,默認命令在sbt控制檯中以show dockerCommands
顯示。
是的。這是文檔中的例子。小提示:您可以在'enablePlugins(...)'中刪除'DockerPlugin'。 'JavaAppPackaging'默認啓用它。 – Muki
@Muki不完全來自文檔。該文檔使用不推薦的'jarName',並沒有將胖jar作爲Docker容器的示例,但僅包含單獨的部分。但是,我從文檔中獲得了這個想法。 你可以說如果有辦法停止生成作爲默認入口點的腳本嗎?我不包括它們,但它們仍然在本地生成在'opt/docker/bin'中。 –