2015-02-23 7 views
11

Sto usando sbt-native-packager 1.0.0-M5 per creare l'immagine della finestra mobile. Devo aggiungere un file che non è un file sorgente o nella cartella delle risorse. I miei comandi della finestra mobile sono i seguenti:File ADD/COPY con supporto docker di sbt-native-packager

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

non riesce con: msg="test.txt: no such file or directory"

Così, dopo aver scavato un po 'intorno sembra ho bisogno di avere test.txt in target/docker/stage. Quindi funziona. Ma come lo ottengo automaticamente? Il file si trova effettivamente nella cartella principale del progetto.

+1

Mi stavo chiedendo anche questo. Posso dirti che aggiungerlo come una mappatura ('mapping in Docker' o' dockerPackageMappings in Docker') non funziona, nonostante [sembra che dovrebbe funzionare] (https://github.com/sbt/sbt-native- packager/blob/master/src/main/Scala/com/typesafe/SBT/confezionatore/finestra mobile/DockerPlugin.scala # L94). – 2rs2ts

risposta

10

Sono riuscito a farlo funzionare aggiungendo il file a mappings in Universal. Quindi per te, si avrebbe bisogno di qualcosa di simile:

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

non sarà necessario il comando COPY se fate questo, tra l'altro.

Ora, non sono sicuro se questo aggiungerà questa mappatura ad altri plugin di sbt-native-packager. Spero che un commentatore possa dirmi se questo è vero o meno, ma la mia intuizione è che lo farà, che potrebbe essere un dealbreaker per te. Ma qualsiasi soluzione alternativa è meglio di niente, giusto? Se si utilizza Build.scala si potrebbe forse usare un argomento VM per dire sbt o meno di aggiungere questa mappatura ...

+0

Sono in grado di posizionare i file all'interno della directory di lavoro di Docker in questo modo, ma sfortunatamente nella radice. ad esempio mappando a "/test.txt" sembra che la barra precedente sia stata ignorata. – akauppi

+0

È possibile eseguire un altro comando per spostare il file nel punto in cui si desidera: dockerCommands + = ExecCmd ("RUN", "mv", s "$ {(defaultLinuxInstallLocation in Docker) .value} /keys/test.txt", "/wherever/you/want/test.txt") – radek1st

0

sono stato in grado di aggiungere i file in questo modo:

Ad esempio, per aggiungere un file che si trova in 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") 
    ... 
    } 
} 
+1

Sfortunatamente, questa è una soluzione per il plugin sbt-docker, non per sbt-native-packager. – mzywiol

+1

Beh, mi ha aiutato, visto che stavo cercando una soluzione per sbt-docker e Google mi ha portato qui. :) –

1

sono stato in grado di ottenere questo lavoro utilizzando dockerPackageMappings:

dockerPackageMappings in Docker += (baseDirectory.value/"docker"/"ssh_config") -> "ssh_config" 

dockerCommands := (dockerCommands.value match { 
    case Seq([email protected]("FROM", _), [email protected]_*) => 
    Seq(
    from, 
    Cmd("Add", "ssh_config", "/sbin/.ssh/config") 
) ++ rest 
}) 
2

Si può plac e tutti i file aggiuntivi (che devono essere inclusi nell'immagine del contenitore) nella cartella src/universal. Il contenuto di tale cartella verrà automaticamente copiato nella cartella /opt/app all'interno dell'immagine del contenitore. Non hai bisogno di alcuna configurazione aggiuntiva. Vedi "Getting started with Universal Packaging" per ulteriori informazioni.

Problemi correlati