首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sbt-native-packager的docker支持添加/复制文件

使用sbt-native-packager的docker支持添加/复制文件
EN

Stack Overflow用户
提问于 2015-02-23 22:27:05
回答 5查看 7.6K关注 0票数 17

我使用sbt-native-packager 1.0.0-M5来创建我的docker镜像。我需要添加一个非源文件或资源文件夹中的文件。我的docker命令如下:

代码语言:javascript
复制
dockerCommands := Seq(
  Cmd("FROM", "myrepo/myImage:1.0.0"),
  Cmd("COPY", "test.txt keys/"), // <-- The failing part
  Cmd("WORKDIR", "/opt/docker"),
  Cmd("RUN", "[\"chown\", \"-R\", \"daemon\", \".\"]"),
  Cmd("USER", "daemon"),
  ExecCmd("CMD", "echo", "Hello, World from Docker")
)

失败,错误为:msg="test.txt: no such file or directory"

因此,在深入研究之后,我似乎需要在target/docker/stage中使用test.txt。然后它就起作用了。但是我如何自动地把它放到那里呢?该文件实际上位于项目的根文件夹中。

EN

回答 5

Stack Overflow用户

发布于 2015-03-14 05:18:11

通过将文件添加到mappings in Universal,我设法使其正常工作。所以对于你来说,你需要这样的东西:

代码语言:javascript
复制
mappings in Universal += file("test.txt") -> "keys/test.txt"

顺便说一句,如果这样做,您将不需要COPY命令。

现在,我不确定这是否会将这个映射添加到其他sbt原生打包插件中。我希望评论者能告诉我这是否是真的,但我的直觉是它会这样做,这可能会破坏你的交易。但是有解决办法总比没有好,对吧?如果你使用Build.scala,你也许可以使用一个VM参数来告诉sbt是否要添加这个映射...

票数 21
EN

Stack Overflow用户

发布于 2017-05-16 19:53:03

您可以将所有其他文件(必须包含在容器镜像中)放入src/universal文件夹。该文件夹的内容将自动复制到容器镜像中的/opt/app文件夹中。您不需要任何额外的配置。有关更多信息,请参阅"Getting started with Universal Packaging"

位于/src/universal中的文件将在Docker容器中的Scala应用程序的运行时目录中可用。这意味着,如果您的应用程序具有/src/universal/example.txt,则可以使用scala.io.Source.fromFile("./example.txt")进行访问

票数 10
EN

Stack Overflow用户

发布于 2015-11-05 00:17:05

对于sbt-docker插件,而不是sbt-原生打包程序

我可以这样添加文件:

例如,要添加位于src/main/resources/docker/some-file.ext中的文件

代码语言:javascript
复制
dockerfile in docker := {
  val targetPath = "/usr/app"

  // map of (relativeName -> File) of all files in resources/docker dir, for convenience
  val dockerFiles = {
    val resources = (unmanagedResources in Runtime).value
    val dockerFilesDir = resources.find(_.getPath.endsWith("/docker")).get
    resources.filter(_.getPath.contains("/docker/")).map(r => dockerFilesDir.toURI.relativize(r.toURI).getPath -> r).toMap
  }

  new Dockerfile {
    from(s"$namespace/$baseImageName:$baseImageTag")
    ...
    add(dockerFiles("some-file.ext"), s"$targetPath/some-file.ext")
    ...
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28676006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档