Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Play JPA项目中使用sbt native packager向Docker添加自定义文件夹_Jpa_Docker_Playframework_Playframework 2.5_Sbt Native Packager - Fatal编程技术网

在Play JPA项目中使用sbt native packager向Docker添加自定义文件夹

在Play JPA项目中使用sbt native packager向Docker添加自定义文件夹,jpa,docker,playframework,playframework-2.5,sbt-native-packager,Jpa,Docker,Playframework,Playframework 2.5,Sbt Native Packager,我正在做一个JPA+Playframework 2.5.x项目,我把它打包成Docker镜像 我想强制将conf文件夹下除一个文件(META-INF/persistence.xml)之外的所有文件添加到docker输出 目前,我已完成以下工作: mappings in Docker += file("conf/base/application.conf") -> "opt/docker/conf/base/application.conf" mappings in Docker += fi

我正在做一个JPA+Playframework 2.5.x项目,我把它打包成Docker镜像

我想强制将
conf
文件夹下除一个文件(META-INF/persistence.xml)之外的所有文件添加到docker输出

目前,我已完成以下工作:

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"
我相信这不是实现这一目标的最佳途径。有谁能推荐更好的选项,以我需要的方式定制Docker输出

我的build.sbt文件:

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")
)
PlayKeys.externalizeResources:=false
名称:=“wp pw ng”
版本:=“1.0.0-快照”
lazy val`wp pw ng`=(文件中的项目(“.”)。启用插件(PlayJava、JavaAppPackaging)
val playVer=“2.5.9”
规模厌恶:=“2.11.8”
libraryDependencies++=Seq(
javaJpa,
“org.hibernate”%“hibernate核心”%“5.2.3.Final”排除(“dom4j”、“dom4j”),
“mysql”%“mysql连接器java”%“6.0.5”,
隐藏物
javaWs,
过滤器,
“dom4j”%“dom4j”%“1.6”,
“com.google.guava”%“guava”%“20.0-rc1”,
“com.amazonaws”%“aws java sdk”%“1.11.34”
)
val docDeps=序列(
“io.swagger”%%“swagger-play2”%%“1.5.3.2”
)
libraryDependencies++=docDeps
fork-in测试:=true
测试中的javaOptions++=Seq(
“-Xms512M”,
“-Xmx1536M”,
“-Xss1M”,
“-XX:MaxPermSize=384M”
)
运行中的fork:=false
编译“opt/docker/conf/base/application.conf”中的非托管源目录
Docker+=文件(“conf/base/default client.conf”)->“opt/Docker/conf/base/default client.conf”中的映射
Docker+=文件(“conf/base/pw.conf”)->“opt/Docker/conf/base/paywall.conf”中的映射
Docker+=文件(“conf/prod/application.conf”)->“opt/Docker/conf/prod/application.conf”中的映射
Docker+=文件(“conf/prod/logback.xml”)->“opt/Docker/conf/prod/logback.xml”中的映射
Docker+=文件(“conf/stage/application.conf”)->“opt/Docker/conf/stage/application.conf”中的映射
Docker+=文件(“conf/stage/logback.xml”)->“opt/Docker/conf/stage/logback.xml”中的映射
Docker+=文件(“conf/local/application.conf”)->“opt/Docker/conf/local/application.conf”中的映射
Docker+=文件(“conf/local/logback.xml”)->“opt/Docker/conf/local/logback.xml”中的映射
Docker+=文件(“conf/routes”)->“opt/Docker/conf/routes”中的映射
Docker+=文件(“conf/ValidationMessages.properties”)->“opt/Docker/conf/ValidationMessages.properties”中的映射
//************************************************
//定制Docker构建,
//使用命令“activator docker:publishLocal”
//将图像本地发布到计算机。
//************************************************
导入com.typesafe.sbt.packager.docker_
val playUser=“播放”
val grp=“idud”
dockerRepository:=部分(“码头io/we”)
Docker中的版本:=“最新”
val buildEnv:String=System.getProperty(“build.env”)
DockerCommand:=序号(
Cmd(“来自”、“anapsix/alpine java:8_jdk_unlimited”),
Cmd(“RUN”,“apk”,“Uuv-add”,“no-cache”,“su-exec”,“groff”,“less”,“python”,“py-pip”,“&&pip安装awscli”,“&&apk-清除-v del-py-pip”,“&&rm/var/cache/apk/*”,
Cmd(“运行”,s“添加组$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(“RUN”、“chown”、“-R”、s“$playUser:$grp”、“grp”),
Cmd(“用户”,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”)
)
其他信息
由于Playframework在build
stage
模式下出现问题,我不得不求助于此解决方案,并且我必须在我的
build.sbt
文件中使用
PlayKeys.externalizeResources:=false
标志。这将从Docker中的
conf
文件夹中删除所有文件。

playExternalizeResources:=false
设置为Universal中的
映射,这些映射可用于包括Docker在内的所有目标包格式

您的构建sbt可以用()结束

您还可以过滤映射以删除不需要的文件,例如

import NativePackagerHelper._
mappings in Universal ++= contentOf("conf").filter(_.2.contains("persistence.xml")
希望有帮助,
Muki

只需在
universal/conf
目录中添加要映射的文件。因此,当您创建docker映像时,文件会添加到
/opt/docker/conf
目录中。

谢谢,我会尝试一下。这不起作用,因为在docker stage文件夹中,我需要文件位于
opt/docker/conf/
下,只需简单地将它们作为
映射添加到docker++=contentOf(“conf”)中即可
将其添加到
target/stage
文件夹下。我需要在
opt/docker/conf/
下重新映射文件,然后使用
目录
而不是
contentOf
和结果映射的映射。就像其他Scala系列一样
import NativePackagerHelper._
mappings in Universal ++= contentOf("conf").filter(_.2.contains("persistence.xml")