适用于Mac OS X的Docker的sbt-native-packager

嘿大家我有一个问题,使用本地包装器创build一个Scalatra Web应用程序的docker图像。 我的build.sbt文件的相关部分在这里:

enablePlugins(JettyPlugin) enablePlugins(JavaAppPackaging) enablePlugins(DockerPlugin) // for Docker, the "." location where it is looking for files is in target/docker/stage. For the COPY command to work, // the sbt Docker packager has to know this file resides in ../../scala-2.11 so include this mapping //mappings in Docker += file("../../scala-2.11/direct2-batch-match_2.11-0.1.0-SNAPSHOT.war") -> "direct2-batch-match_2.11-0.1.0-SNAPSHOT.war" dockerCommands := Seq(Cmd("FROM","tomcat:8.0.20-jre8"), Cmd("LABEL", """vendor="Dun & Bradstreet" """), Cmd("LABEL", """version="0.0" """), Cmd("EXPOSE", "8080"), Cmd("COPY","direct2-batch-match_2.11-0.1.0-SNAPSHOT.war","webapps/d2bm.war")) 

正如你所看到的,我已经在Docker中注释了映射。 原因是如果我把它放在里面,它会在target / docker / stage中创build一个与我的war文件同名的空目录(在这种情况下是direct2-batch-match_2.11-0.1.0-SNAPSHOT.war) 。 这使Dockerfile可以正常工作,但是war文件的内容不包含在构build中。

我在Mac OS X上运行,我想知道这是一个插件试图创build一个链接到所需文件的错误,也许Linux的链接命令在Mac OS X Sierra上给出了错误的结果。

我需要做不同的映射吗? 有没有其他人遇到这个? 当我在sbt中运行docker:publishLocal时,创build了空目录,我正在使用插件1.2.0-M9。

在sbt中运行docker的结果:publishLocal:

 docker:publishLocal [info] Updating {file:/Users/cardm/projects/direct2-batch-match/}direct2-batch-match... [info] Wrote /Users/cardm/projects/direct2-batch-match/target/scala-2.11/direct2-batch-match_2.11-0.1.0-SNAPSHOT.pom [info] Resolving org.scalatra.scalate#scalate-precompiler_2.11;1.8.0.1 ... [info] Done updating. [info] Compiling Templates in Template Directory: /Users/cardm/projects/direct2-batch-match/src/main/webapp/WEB-INF/templates SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. [warn] You have no main class in your project. No start script will be generated. [warn] You have no main class in your project. No start script will be generated. [info] Sending build context to Docker daemon 74.45 MB [info] Step 1/5 : FROM tomcat:8.0.20-jre8 [info] ---> e88a065848be [info] Step 2/5 : LABEL vendor "Dun & Bradstreet" [info] ---> Using cache [info] ---> de03acb09377 [info] Step 3/5 : LABEL version "0.0" [info] ---> Using cache [info] ---> f4f3e4accacb [info] Step 4/5 : EXPOSE 8080 [info] ---> Using cache [info] ---> f971b388dc2c [info] Step 5/5 : COPY direct2-batch-match_2.11-0.1.0-SNAPSHOT.war webapps/d2bm.war [info] ---> 60a95c386e23 [info] Removing intermediate container cf15079616cd [info] Successfully built 60a95c386e23 [info] Built image DockerAlias(None,None,direct2-batch-match,Some(0.1.0-SNAPSHOT)) [success] Total time: 4 s, completed Apr 28, 2017 6:35:09 PM 

目标/docker/阶段的内容:

 Mike-Cards-MacBook-Pro:direct2-batch-match cardm$ ls -la target/docker/stage/ total 8 drwxr-xr-x 5 cardm staff 170 Apr 28 18:35 . drwxr-xr-x 4 cardm staff 136 Apr 28 18:35 .. -rw-r--r-- 1 cardm staff 156 Apr 28 18:35 Dockerfile drwxr-xr-x 2 cardm staff 68 Dec 31 1969 direct2-batch-match_2.11-0.1.0-SNAPSHOT.war drwxr-xr-x 3 cardm staff 102 Apr 28 18:35 opt 

正如你可以看到有什么不对,把一个空目录放在那里而不是文件是没有用的,这就是为什么我认为这应该是一个链接。 在我的设置文件,如果我使用“通用映射”,而不是产生相同的结果,一个空的目录与战争文件的名称。

嘿大家,事实certificate,问题是如何设置我的sbt文件,特别是“在Docker中的映射”部分。 我的项目的正确设置如下:

 mappings in Docker += file("target/scala-2.11/direct2-batch-match_2.11-0.1.0-SNAPSHOT.war") -> "direct2-batch-match_2.11-0.1.0-SNAPSHOT.war" 

这里的诀窍是“源”文件( – >的左侧)与PROJECT ROOT文件夹相关,而目标文件( – >的右侧)与docker staging目录相关,该目录位于PROJECT ROOT /目标/搬运工/阶段。 在我原来的设置中,我假定两个文件path都是相对于Docker分段目录的,而在debuggingsbt-native-packager插件的时候,我发现这两个path是相对于不同的根目录的。

我真的认为Docker的sbt-native-packager文档应该被更新,以便清楚地说明这一点。