Copiare file da e verso un container Docker
Quando lavori con Docker, potrebbe essere necessario copiare file da e verso un container Docker e il tuo computer.
Dopo aver creato l’immagine Docker e aver ottenuto il vostro container, dover eseguire la build ancora e ancora solo per aggiungere un file al suo interno potrebbe essere noioso, perché capita che le immagini siano di dimensioni abbastanza grandi…
Docker però ci fornisce dei comandi molto utili che ci consentono di copiare senza problemi i file da e verso un container Docker e il sistema locale.
In questo articolo, discuteremo come utilizzare i comandi Docker cp vedendo degli esempi pratici!
Copia di file dal container al computer locale
Segui i passaggi seguenti per copiare un file da un contenitore Docker a un computer locale:
Crea un container
Come prova, è possibile utilizzare l’immagine di Ubuntu e creare un file di prova al suo interno, eseguendo i comandi riportati:
docker run -it --name my-container ubuntu
>>>
root@e625c04df0b0:/# cd home/
root@e625c04df0b0:/home# ls -la
total 8
drwxr-xr-x 2 root root 4096 Apr 15 2020 .
drwxr-xr-x 1 root root 4096 Apr 5 15:16 ..
root@e625c04df0b0:/home# touch myfile.txt
root@e625c04df0b0:/home# echo "pippo" > myfile.txt
root@e625c04df0b0:/home# cat myfile.txt
pippo
Trova l’ID del container
Adesso andiamo a recuperare l’ID del container da cui vogliamo copiare il file eseguendo il comando seguente:
docker ps -a
>>>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e3c6d689766e ubuntu "bash" 19 seconds ago Up 19 seconds my-container
Copia il file sul tuo sistema locale
È possibile utilizzare il comando docker cp per copiare il file, specificando l’ID del container separato da “:” con il path assoluto del file e poi specificando il percorso -sempre assoluto- di dove verrà salvato in locale.
Il comando ha questa sintassi:
docker cp [CONTAINER_ID]:[PATH_ASSOLUTO_SORGENTE] [PATH_ASSOLUTO_DESTINAZIONE]
Esempio: docker cp 123abc:/home/folder/file.txt /tmp/file.txt
root@system:~$ docker cp e3c6d689766e:/home/myfile.txt /tmp/myfile.txt
root@system:~$ ls -la /tmp/
>>> -rw-r--r-- 1 root root 6 Apr 5 19:19 myfile.txt
Copia di file da locale al container
Puoi usare sempre l’istruzione cp con la seguente sintassi -tieni presente che il container dev’essere up&running-:
docker cp [PATH_ASSOLUTO_SORGENTE] [CONTAINER_ID]:[PATH_ASSOLUTO_DESTINAZIONE]
Esempio: docker cp 123abc:/home/folder/file.txt /tmp/file.txt
root@system:~$ docker cp /tmp/myfile.txt
e3c6d689766e:/home/myfile.txt
Per verificare che il file sia stato copiato correttamente, utilizzare il comando seguente:
root@system:~$ docker exec -it my-container /bin/bash
root@e3c6d689766e:/# ls -la /tmp/
>>> -rw-r--r-- 1 root root 6 Apr 5 19:19 myfile.txt