我使用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")
)失败,错误为:msg="test.txt: no such file or directory"
因此,在深入研究之后,我似乎需要在target/docker/stage中使用test.txt。然后它就起作用了。但是我如何自动地把它放到那里呢?该文件实际上位于项目的根文件夹中。
发布于 2015-03-14 05:18:11
通过将文件添加到mappings in Universal,我设法使其正常工作。所以对于你来说,你需要这样的东西:
mappings in Universal += file("test.txt") -> "keys/test.txt"顺便说一句,如果这样做,您将不需要COPY命令。
现在,我不确定这是否会将这个映射添加到其他sbt原生打包插件中。我希望评论者能告诉我这是否是真的,但我的直觉是它会这样做,这可能会破坏你的交易。但是有解决办法总比没有好,对吧?如果你使用Build.scala,你也许可以使用一个VM参数来告诉sbt是否要添加这个映射...
发布于 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")进行访问
发布于 2015-11-05 00:17:05
对于sbt-docker插件,而不是sbt-原生打包程序
我可以这样添加文件:
例如,要添加位于src/main/resources/docker/some-file.ext中的文件
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")
...
}
}https://stackoverflow.com/questions/28676006
复制相似问题