Copier un fichier local dans un container Docker

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