Come trasferire file da e verso un container Docker

Utilizza il comando di Docker docker cpper copiare file o directory tra la tua macchina locale e un container. Funziona in entrambe le direzioni, copia le directory in modo ricorsivo e può essere utilizzato sia per container in esecuzione che arrestati. Non è necessario aprire una shell nel container né creare un archivio tar per una copia ordinaria.

La sintassi di base è docker cp SOURCE DESTINATION. Anteponi il nome o l'ID del container ai due punti per il percorso del container: docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHcopia all'interno di un container, mentre docker cp CONTAINER:CONTAINER_PATH LOCAL_PATHcopia all'esterno. La documentazione di riferimento di Docker, `docker cp`, descrive le regole relative a percorsi e directory.

1. Trova il nome o l'ID del contenitore

Esegui questo comando da un terminale in cui i comandi Docker possano raggiungere il Docker Engine:

docker ps -a

docker psElenca i container in esecuzione; l'aggiunta -amostra anche i container arrestati. Utilizza il valore nella NAMEScolonna o un ID container nei comandi seguenti. Un nome come webè facile da riutilizzare; un ID è un identificatore preciso quando è necessario distinguere i container. Puoi controllare i campi mostrati da docker ps / docker container ls .

Output del terminale del comando docker ps -a che mostra un container in esecuzione denominato web e il suo ID breve.
Utilizzare il nome o l'ID del contenitore mostrato da docker ps -a.

2. Copia un file dal tuo computer nel contenitore

Esegui docker cpil comando sulla macchina di cui desideri copiare i file. Ad esempio, da una cartella di progetto contenente report.csv, copiala in /tmpall'interno del contenitore denominato web:

docker cp ./report.csv web:/tmp/report.csv

Sostituisci ./report.csvcon il percorso del file locale, webcon il nome o l'ID del tuo container e /tmp/report.csvcon il percorso di destinazione all'interno del container. I percorsi dei container vengono interpretati a partire dalla directory radice del container, quindi la barra iniziale è facoltativa. Se la destinazione specifica una directory esistente, Docker inserisce il file al suo interno utilizzando il nome del file di origine.

Comando da terminale per copiare il file locale report.csv nel contenitore web in /tmp/report.csv.
Questo comando copia un file host nel container.

Docker copia le directory in modo ricorsivo. Se /etc/app/esistono già, questo comando le inserisce configal loro interno:

docker cp ./config web:/etc/app/

Per copiare solo il contenuto di configin /etc/app/, includi /.alla fine del percorso di origine:

Comando da terminale che copia il contenuto della directory di configurazione locale in /etc/app all'interno del container web.
Il /.suffisso indica di copiare il contenuto della directory, anziché annidare la directory di origine.
docker cp ./config/. web:/etc/app/

Docker non crea le directory padre mancanti. Crea prima la directory padre della destinazione. Per creare una cartella mancante all'interno di un container in esecuzione, esegui docker exec web mkdir -p /etc/app, quindi copia i file. docker execrichiede un container in esecuzione; docker cpno.

3. Copia un file dal contenitore al tuo computer

Per recuperare un file, inverti l'ordine di origine e destinazione. Crea prima la cartella di destinazione locale, quindi copia il file di log dal contenitore:

mkdir -p ./backup
docker cp web:/var/log/app.log ./backup/
Comando da terminale per recuperare il file app.log dalla directory /var/log all'interno del container web e salvarlo in una directory di backup locale.
La cartella di destinazione locale deve esistere prima di copiare i file al suo interno.

È possibile recuperare una directory allo stesso modo. Aggiungi /.al percorso sorgente del contenitore per copiare il suo contenuto direttamente in una directory locale esistente:

docker cp web:/var/log/app/. ./backup/

Docker è in grado di copiare file da un container arrestato, il che è utile per raccogliere log o configurazioni dopo la terminazione di un processo.

Utilizzo di Docker Compose

Se il tuo progetto utilizza Compose, usa il nome del servizio docker compose cpinvece di cercare un ID del contenitore. Ad esempio, copia un file locale in un servizio denominato web:

docker compose cp ./report.csv web:/tmp/report.csv

Per copiare nella direzione opposta, invertire i percorsi:

docker compose cp web:/var/log/app.log ./backup/

Consulta la documentazione ufficiale di docker compose cp per opzioni come la selezione di una replica quando un servizio ha più container.

Autorizzazioni e archiviazione persistente

Per impostazione predefinita, i file copiati in un container appartengono all'utente root e al gruppo primario; i file copiati sul computer appartengono all'utente che esegue Docker. Le autorizzazioni vengono mantenute ove possibile. Utilizzare questa opzione -aper preservare l'UID e il GID di origine. Se un'app non riesce a leggere un file, controlla la sua destinazione e la proprietà anziché concedere privilegi al container.

I file presenti nel livello scrivibile di un container vengono rimossi insieme al container stesso. Per i dati che devono persistere, utilizzare un volume Docker o un bind mount. I volumi sono adatti ai dati persistenti dei container; i bind mount consentono all'host e al container di accedere agli stessi file. Se si copiano file in un percorso coperto da un mount, si modificano i dati montati. Verificare prima la destinazione. Consultare la guida di Docker su volumi e bind mount .

Risoluzione rapida dei problemi

  • "Contenitore non trovato": esegui il comando docker ps -ae verifica il nome o l'ID del contenitore.
  • "File o directory non esistente": controlla il percorso di origine e assicurati che la directory padre di destinazione esista. I percorsi dei contenitori iniziano da /.
  • La cartella è stata posizionata un livello più in profondità del previsto: utilizzare il comando `sudo` /.per copiare solo il contenuto della directory.
  • Permesso negato: verifica che il tuo account possa utilizzare Docker e che l'utente dell'applicazione abbia i permessi di lettura o scrittura per la destinazione. Su Linux, utilizza questa opzione sudosolo se la policy di accesso a Docker del tuo sistema lo richiede.
  • I file scompaiono dopo la pulizia: salva i dati importanti in un volume o in un bind mount, non solo nello strato scrivibile del contenitore.

Lascia un commento

Come scansionare i codici QR su un computer desktop Linux

Come scansionare i codici QR su un computer desktop Linux

Scansiona i codici QR su Linux con CoBang utilizzando una webcam o un file immagine. Consulta le opzioni di installazione, i passaggi di configurazione e le soluzioni per l'accesso alla fotocamera tramite Flatpak.

Come modificare le impostazioni della webcam su Linux con Cameractrls

Come modificare le impostazioni della webcam su Linux con Cameractrls

Modifica le impostazioni della webcam su Linux con Cameractrls: regola l'esposizione, il colore, la riduzione dello sfarfallio e altri controlli supportati, quindi verifica le modalità video compatibili.

Come installare PhpStorm su Linux: Toolbox, Tar.gz, Snap e AUR

Come installare PhpStorm su Linux: Toolbox, Tar.gz, Snap e AUR

Installa PhpStorm su Linux con JetBrains Toolbox o con l'archivio tar.gz autonomo, oltre alle opzioni Snap e Arch AUR. Java è già incluso.

Come eseguire il backup di un CD-ROM come immagine ISO su Linux

Come eseguire il backup di un CD-ROM come immagine ISO su Linux

Crea un'immagine ISO di un CD-ROM su Linux con GNOME Disks o dd. Identifica l'unità ottica, monitora la copia, verifica l'immagine e scopri quando un disco danneggiato o un disco audio richiede uno strumento aggiuntivo.

Come installare Cisco Packet Tracer su Linux

Come installare Cisco Packet Tracer su Linux

Scarica Cisco Packet Tracer 9.0.1 per Ubuntu a 64 bit, installa il pacchetto DEB con APT, accetta la licenza nel Terminale ed effettua l'accesso per avviare un laboratorio.

Come configurare due pannelli su XFCE 4

Come configurare due pannelli su XFCE 4

Crea un pannello XFCE 4 separato per ogni schermo, assegna il secondo pannello all'uscita corretta, posizionalo e ridimensionalo, e aggiungi i launcher e gli elementi di stato necessari.

Come ritagliare un'immagine su Linux con GIMP

Come ritagliare un'immagine su Linux con GIMP

Rimuovere lo sfondo di una foto su Linux con GIMP: traccia il soggetto, elimina lo sfondo selezionato, mantieni la trasparenza ed esporta un file PNG riutilizzabile.

Applicazione desktop Google Tasks: come utilizzarla su un computer

Applicazione desktop Google Tasks: come utilizzarla su un computer

Apri Google Tasks in un browser, aggiungi un collegamento a Chrome o avvialo come un'app e gestisci le attività con data tramite Calendar e Gmail.

OKSampler: un campionatore musicale gratuito e semplice per creare ritmi da tastiera.

OKSampler: un campionatore musicale gratuito e semplice per creare ritmi da tastiera.

OKSampler associa i file MP3 ai tasti della tastiera e permette la riproduzione in loop dell'audio. Scopri cosa fa questo software gratuito ormai datato, dove finiscono le sue vecchie funzionalità e cosa controllare prima di scaricarlo.

Come giocare a Squad su Linux con Steam Proton

Come giocare a Squad su Linux con Steam Proton

Configura Squad su Linux con Steam Play e Proton, installa il gioco, scegli uno strumento di compatibilità e risolvi i problemi relativi ai sistemi anti-cheat.