2017-08-18 31 views
0

我試圖使用SBT-本機打包製作我的斯卡拉發揮應用程序的一個碼頭工人的形象,我也跟着在http://www.scala-sbt.org/sbt-native-packager/formats/docker.htmlSBT-本機打包斯卡拉發揮dockerfile不是默認的配置運行

描述的步驟這是我的配置:

我plugins.sbt我增加了對依賴本土SBT打包:

// SBT Native 
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.1") 

我build.sbt我加入通用和泊塢窗插件:

.enablePlugins(PlayScala, JavaAppPackaging) 

我還添加了一些額外的屬性:

javaOptions in Universal ++= Seq(
    // JVM memory tuning 
    "-J-Xmx1024m", 
    "-J-Xms512m", 

    // Since play uses separate pidfile we have to provide it with a proper path 
    // name of the pid file must be play.pid 
    s"-Dpidfile.path=/var/run/${packageName.value}/play.pid", 

    // Use separate configuration file for production environment 
    s"-Dconfig.file=/usr/share/${packageName.value}/conf/production.conf", 

    // Use separate logger configuration file for production environment 
    s"-Dlogger.file=/usr/share/${packageName.value}/conf/logback.xml" 
) 

// exposing the play ports 
dockerExposedPorts in Docker := Seq(9000, 9443) 

然後我使用插件生成搬運工圖像和SBT CLI:

docker:publishLocal 

的dockerfile得到在./target/docker/產生Dockerfile

當我檢查我看到的文件時:

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

這似乎並沒有包含所有必要的步驟來運行應用程序,當我使用docker build .我得到:

java.nio.file.NoSuchFileException:在/ var /運行/根/播放。 PID

這似乎是Dockerfile缺少一些步驟,它應該的mkdir /var/run/{APP_NAME}/ (*搬運工容器實例內創建文件夾)

和chown,爲了文件夾下找到發揮創造在P ID文件。

如何解決上述錯誤?

回答

0

啓動Docker鏡像時出現什麼錯誤信息,以及如何啓動它?

然後有一些值得注意的事情。

遊戲附帶的本機打包

你不應該添加任何插件,但只配置泊塢窗相關的東西。您已經鏈接格式(碼頭工具)的正確文檔。

原型Vs的格式

配置將不能沒有播放插件工作。看看http://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/index.html,它解釋瞭如何配置一個簡單的應用程序構建。

我也建議閱讀的格式和原型節在這裏: http://www.scala-sbt.org/sbt-native-packager/introduction.html#archetype-plugins

本地搬運工建立

本機打包目前生成兩個文件泊塢窗,這是混亂和不相關的。對不起,這個混亂。我們計劃刪除冗餘泊塢窗文件。 只需進入更深層次並運行docker build命令。

希望有幫助, Muki

+0

感謝您的額外信息。我確實檢查了你的鏈接,並且我遇到了一個問題,我的遊戲應用程序不能正常工作,我在上面添加了一些更多細節,並且遵循了你的建議,似乎來自sbt-native-packager的結果圖像缺少步驟它創建文件夾/ var/run/{app_name} /(PID文件),我需要將這些步驟添加爲我的build.sbt中的自定義字段嗎? – guilhebl

+0

Dockerfile嘗試創建/var/run/${packageName.value}/文件夾並獲取權限被拒絕,所以我認爲它應該以root身份運行?對於上述問題的任何建議?謝謝。 – guilhebl

+0

您可以通過將其設置爲'/ dev/null'來禁用pid文件。它在遊戲應用程序中有記錄。對docker使用pid文件沒有意義。 – Muki