1

Ich arbeite an einem JPA + Playframework 2.5.x Projekt, die ich es als Docker Bild verpacken.Hinzufügen von benutzerdefinierten Ordner zu Docker mit sbt-native-Packager in Play JPA-Projekt

Ich möchte alle Dateien gewaltsam hinzuzufügen, außer einer Datei (META-INF/persistence.xml) unter conf Ordner habe ich Ausgang

Zeit Andockfenster folgendes getan:

mappings in Docker += file("conf/base/application.conf") -> "opt/docker/conf/base/application.conf" 
mappings in Docker += file("conf/base/default-client.conf") -> "opt/docker/conf/base/default-client.conf" 
mappings in Docker += file("conf/prod/application.conf") -> "opt/docker/conf/prod/application.conf" 
mappings in Docker += file("conf/prod/logback.xml") -> "opt/docker/conf/prod/logback.xml" 
mappings in Docker += file("conf/stage/application.conf") -> "opt/docker/conf/stage/application.conf" 
mappings in Docker += file("conf/stage/logback.xml") -> "opt/docker/conf/stage/logback.xml" 
mappings in Docker += file("conf/local/application.conf") -> "opt/docker/conf/local/application.conf" 
mappings in Docker += file("conf/local/logback.xml") -> "opt/docker/conf/local/logback.xml" 
mappings in Docker += file("conf/routes") -> "opt/docker/conf/routes" 
mappings in Docker += file("conf/ValidationMessages.properties") -> "opt/docker/conf/ValidationMessages.properties" 

Ich bin Sicher, das ist nicht der beste Weg, dies zu erreichen. Kann jemand bessere Option vorschlagen, um die Docker-Ausgabe so anzupassen, wie ich es brauche?

Meine build.sbt Datei:

PlayKeys.externalizeResources := false 
name := """wp-pw-ng""" 

version := "1.0.0-SNAPSHOT" 

lazy val `wp-pw-ng` = (project in file(".")).enablePlugins(PlayJava, JavaAppPackaging) 

val playVer = "2.5.9" 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    javaJpa, 
    "org.hibernate" % "hibernate-core" % "5.2.3.Final" exclude("dom4j", "dom4j"), 
    "mysql" % "mysql-connector-java" % "6.0.5", 
    cache, 
    javaWs, 
    filters, 
    "dom4j" % "dom4j" % "1.6", 
    "com.google.guava" % "guava" % "20.0-rc1", 
    "com.amazonaws" % "aws-java-sdk" % "1.11.34" 
) 

val docDeps = Seq(
    "io.swagger" %% "swagger-play2" % "1.5.3.2" 
) 

libraryDependencies ++= docDeps 

fork in Test := true 
javaOptions in Test ++= Seq(
    "-Xms512M", 
    "-Xmx1536M", 
    "-Xss1M", 
    "-XX:MaxPermSize=384M" 
) 

fork in run := false 

unmanagedResourceDirectories in Compile <+= (sourceDirectory in Compile) (_/"resources") 

mappings in Docker += file("conf/base/application.conf") -> "opt/docker/conf/base/application.conf" 
mappings in Docker += file("conf/base/default-client.conf") -> "opt/docker/conf/base/default-client.conf" 
mappings in Docker += file("conf/base/pw.conf") -> "opt/docker/conf/base/paywall.conf" 
mappings in Docker += file("conf/prod/application.conf") -> "opt/docker/conf/prod/application.conf" 
mappings in Docker += file("conf/prod/logback.xml") -> "opt/docker/conf/prod/logback.xml" 
mappings in Docker += file("conf/stage/application.conf") -> "opt/docker/conf/stage/application.conf" 
mappings in Docker += file("conf/stage/logback.xml") -> "opt/docker/conf/stage/logback.xml" 
mappings in Docker += file("conf/local/application.conf") -> "opt/docker/conf/local/application.conf" 
mappings in Docker += file("conf/local/logback.xml") -> "opt/docker/conf/local/logback.xml" 
mappings in Docker += file("conf/routes") -> "opt/docker/conf/routes" 
mappings in Docker += file("conf/ValidationMessages.properties") -> "opt/docker/conf/ValidationMessages.properties" 

//************************************************ 
// Custom Docker Build, 
// use command 'activator docker:publishLocal' 
// to publish image locally to computer. 
//************************************************ 
import com.typesafe.sbt.packager.docker._ 

val playUser = "play" 
val grp = "idud" 
dockerRepository := Some("quay.io/we") 

version in Docker := "latest" 

val buildEnv: String = System.getProperty("build.env") 

dockerCommands := Seq(
    Cmd("FROM", "anapsix/alpine-java:8_jdk_unlimited"), 
    Cmd("RUN", "apk", "-Uuv add", "--no-cache", "su-exec", "groff", "less", "python", "py-pip", "&& pip install awscli ", "&& apk --purge -v del py-pip ", " && rm /var/cache/apk/* "), 
    Cmd("RUN", s"addgroup $grp"), 
    Cmd("RUN", s"adduser -s /bin/bash -D -G $grp $playUser"), 
    Cmd("RUN", "echo", s"'$playUser ALL=(ALL) NOPASSWD:ALL'", ">> /etc/sudoers"), 
    Cmd("WORKDIR", "/opt/docker"), 
    Cmd("ADD", "opt /opt"), 
    Cmd("RUN", "chown", "-R", s"$playUser:$grp", "."), 
    Cmd("USER", s"$playUser"), 
    Cmd("ENTRYPOINT", "[\"bin/wp-pw-ng\", \"-Dconfig.file=conf/" + buildEnv + "/application.conf\", \"-Dhttp.port=7000\" , \"-Dpidfile.path=/dev/null\" ,\"-Dlogger.file=conf/" + buildEnv + "/logback.xml\"]"), 
    Cmd("EXPOSE", "9877") 
) 

Zusätzliche Informationen I dieser Behelfslösung in Build stage Modus Problem mit Playframework aufgrund Ausgabe zurückgreifen musste, Issue 4590 und ich hatte PlayKeys.externalizeResources := false Flagge zu verwenden, in meiner build.sbt Datei. Dies würde alle Dateien aus conf Ordner in Docker entfernen.

Antwort

2

Die playExternalizeResources:= false Einstellung just prevents sbtfrom adding die playExternalizedResources auf Ihre mappings in Universal, die die Zuordnungen für alle Zielpaketformate einschließlich Docker zur Verfügung stehen.

können Ihre Build sbt mit dem MappingsHelper (ScalaDocs)

import NativePackagerHelper._ 
mappings in Universal ++= contentOf("conf") 

lightenend können Sie auch die Zuordnungen filtern die unerwünschten Dateien, zB

import NativePackagerHelper._ 
mappings in Universal ++= contentOf("conf").filter(_.2.contains("persistence.xml") 

Hoffnung, die hilft, Muki

entfernen
+0

Danke, ich werde es ausprobieren –

+0

das funktioniert nicht, da ich im docker stage folder die Dateien unter 'opt/docker/conf /' habe und sie einfach als 'mappings in Docker ++ = hinzufüge contentOf ("conf") 'fügt es unter dem Ordner" target/stage "hinzu. Ich brauche die Dateien neu zugeordnet werden unter 'opt/docker/conf /' –

+0

Dann verwenden Sie 'Verzeichnis' anstelle von' contentOf' und Karte der resultierenden Abbildungen. Wie bei jeder anderen Scala-Kollektion – Muki

0

Fügen Sie einfach die Dateien hinzu, die Sie in einem universal/conf-Verzeichnis zuordnen möchten. Wenn Sie das Docker-Image erstellen, werden die Dateien daher zum Verzeichnis /opt/docker/conf hinzugefügt.

Verwandte Themen