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

And*_*etz 15 scala sbt docker sbt-native-packager

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

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")
)
Run Code Online (Sandbox Code Playgroud)

它失败了: msg="test.txt: no such file or directory"

所以在挖了一下之后,似乎我需要test.txt进去target/docker/stage.然后它工作.但是我如何自动获得它呢?该文件实际上位于项目的根文件夹中.

2rs*_*2ts 18

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

mappings in Universal += file("test.txt") -> "keys/test.txt"
Run Code Online (Sandbox Code Playgroud)

COPY顺便说一下,如果这样做,你将不需要命令.

现在,我不确定这是否会将此映射添加到其他sbt-native-packager插件.我希望评论者可以告诉我这是否属实,但我的直觉是它会这样做,这对你来说可能是一个破坏者.但任何解决方法都比没有好,对吧?如果您使用,Build.scala您可以使用VM参数来判断sbt是否添加此映射...


Nik*_*nov 6

您可以将所有其他文件(必须包含在容器映像中)放入folder src/universal。该文件夹的内容将自动复制到/opt/app容器映像中的文件夹中。您不需要任何其他配置。有关其他信息,请参见“通用包装入门”

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