Bestanden kopiëren van Docker container naar host

Ik'ben aan het denken om Docker te gebruiken om mijn afhankelijkheden te bouwen op een Continuous Integration (CI) server, zodat ik niet'alle runtimes en bibliotheken op de agents zelf hoef te installeren.

Om dit te bereiken zou ik de build artefacten die in de container zijn gebouwd terug naar de host moeten kopiëren. Is dat mogelijk?

Oplossing

Om een bestand van een container naar de host te kopiëren, kun je het commando

docker cp :/file/path/within/container /host/path/target

Hier's een voorbeeld:

$ sudo docker cp goofy_roentgen:/out_read.jpg .

Hier goofy_roentgen is de containernaam die ik kreeg van het volgende commando:

$ sudo docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                            NAMES
1b4ad9311e93        bamos/openface      "/bin/bash"         33 minutes ago      Up 33 minutes       0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp   goofy_roentgen

Je kunt ook (een deel van) de container-ID gebruiken. Het volgende commando is gelijkwaardig aan het eerste

$ sudo docker cp 1b4a:/out_read.jpg .
Commentaren (19)

Mount een "volume" en kopieer de artefacten daar naar toe:


mkdir artifacts
docker run -i -v ${PWD}/artifacts:/artifacts ubuntu:14.04 sh 
Commentaren (6)

Mount een volume, kopieer de artefacten, pas owner id en group id aan:

mkdir artifacts
docker run -i --rm -v ${PWD}/artifacts:/mnt/artifacts centos:6 /bin/bash  /mnt/artifacts/ls.txt
echo Changing owner from \$(id -u):\$(id -g) to $(id -u):$(id -u)
chown -R $(id -u):$(id -u) /mnt/artifacts
COMMANDS
Commentaren (0)