ADD/COPY files with sbt-native-packager's docker support

Andreas Du Rietz picture Andreas Du Rietz · Feb 23, 2015 · Viewed 7.1k times · Source

I'm using sbt-native-packager 1.0.0-M5 to create my docker image. I need to add a file that's not a source file or in the resource folder. My docker commands are as follows:

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")
)

It fails with: msg="test.txt: no such file or directory"

So after digging around a bit it seems I need to have test.txt in target/docker/stage. Then it works. But how do I get it there automatically? The file is actually in the root folder of the project.

Answer

2rs2ts picture 2rs2ts · Mar 13, 2015

I managed to get it to work by adding the file to mappings in Universal. So for you, you would need something like this:

mappings in Universal += file("test.txt") -> "keys/test.txt"

You won't need the COPY command if you do this, by the way.

Now, I'm not sure if this is going to add this mapping to other sbt-native-packager plugins. I hope a commenter can tell me whether or not this is true, but my intuition is that it will do so, which might be a dealbreaker for you. But any workaround is better than none, right? If you use Build.scala you could maybe use a VM argument to tell sbt whether or not to add this mapping...