Voici une astuce pour récupérer rapidement un fichier contenu à l’intérieur d’un container et le copier sur la machine Host de Docker.
Il s’agit de la commande « docker cp » apparu avec la version 1.4 de docker.
Copier un fichier depuis le container vers le hôte
La commande ci-dessous copie un fichier stocké dans le container à l’emplacement indiqué à l’extérieur du container, sur la machine hôte donc.
#bash docker cp <containerId>:/file/path/within/container /host/path/target
Avant la version 1.4, nous devions monter un volume docker pour réaliser cette opération.
Copier un fichier depuis l’hôte vers le container
Pour réaliser l’opération inverse, c’est un petit peu plus compliqué, mais pas impossible. Le montage d’un volume pourrait répondre à la problématique, mais il faudrait pour cela avoir déjà monter le volume lors du lancement du container.
Il existe une solution quand même plus simple avec la commande « docker exec » et les redirection linux. La commande ci-dessous permet donc de copier un fichier sur une machine hôte à l’intérieur d’un container
#bash docker exec -i moncontainer /bin/bash -c 'cat > /inside-container-file' < fichier-exterieur
Voici une autre alternative qui fait exactement la même chose
#bash cat /fichier-exterieur | docker exec -i moncontainer /bin/bash -c 'cat > /inside-container-file'
Pour information, l’équipe de docker prévoit d’améliorer la commande « docker cp » dans les prochaines versions (docker 1.7) pour permettre la copie dans les 2 sens, et même entre 2 containers. Vous pouvez suivre ce ticket sur github
Merci pour l’astuce !