Acasă
» LINUX
»
Cum se transferă fișiere către și dintr-un container Docker
Cum se transferă fișiere către și dintr-un container Docker
Folosește comanda Docker docker cppentru a copia fișiere sau directoare între mașina locală și un container. Funcționează în ambele direcții, copiază directoarele recursiv și poate viza un container care rulează sau este oprit. Nu este nevoie să deschizi un shell în container sau să creezi o arhivă tar pentru o copie obișnuită.
Sintaxa de bază este docker cp SOURCE DESTINATION. Puneți numele sau ID-ul containerului înainte de două puncte pentru o cale de container: docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHcopiază într-un container, în timp ce docker cp CONTAINER:CONTAINER_PATH LOCAL_PATHcopiază în afara acestuia. Referința docker cp din Docker documentează regulile de cale și director.
1. Găsiți numele sau ID-ul containerului
Rulați acest lucru dintr-un terminal unde comenzile Docker pot ajunge la Docker Engine:
docker ps -a
docker pslistează containerele care rulează; adăugarea -aafișează și containerele oprite. Folosește valoarea din NAMEScoloană sau un ID de container în comenzile de mai jos. Un nume precum webeste ușor de reutilizat; un ID este un identificator exact atunci când trebuie să distingi containerele. Poți verifica câmpurile afișate de docker ps / docker container ls .
Folosește numele sau ID-ul containerului afișat prin docker ps -a.
2. Copiați un fișier de pe computer în container
Executați docker cppe mașina ale cărei fișiere doriți să le copiați. De exemplu, dintr-un folder de proiect care conține report.csv, copiați-l în /tmpinteriorul containerului numit web:
docker cp ./report.csv web:/tmp/report.csv
Înlocuiți ./report.csvcu calea fișierului local, webcu numele sau ID-ul containerului și /tmp/report.csvcu calea de destinație din interiorul containerului. Căile containerelor sunt interpretate din directorul rădăcină al containerului, deci bara oblică inițială este opțională. Dacă destinația denumește un director existent, Docker plasează fișierul în acesta folosind numele fișierului sursă.
Această comandă copiază un fișier gazdă în container.
Docker copiază directoarele recursiv. Dacă /etc/app/există deja, această comandă plasează configîn interiorul acestuia:
docker cp ./config web:/etc/app/
Pentru a copia doar conținutul fișierului configîn /etc/app/, includeți /.la sfârșitul căii sursă:
Sufixul /.înseamnă copierea conținutului directorului, în loc să imbricarea directorului sursă.
docker cp ./config/. web:/etc/app/
Docker nu creează directoare părinte lipsă. Creați mai întâi părintele destinației. Pentru a crea un folder lipsă într-un container care rulează, executați docker exec web mkdir -p /etc/app, apoi copiați fișierele. docker execnecesită un container care rulează; docker cpnu o face.
3. Copiați un fișier din container pe computer
Inversați ordinea dintre sursă și destinație pentru a recupera un fișier. Creați mai întâi folderul de destinație local, apoi copiați un fișier jurnal din container:
Folderul de destinație local ar trebui să existe înainte de a fi copiat în acesta.
Puteți recupera un director în același mod. Adăugați /.la calea sursă a containerului pentru a copia conținutul său direct într-un director local existent:
docker cp web:/var/log/app/. ./backup/
Docker poate copia fișiere dintr-un container oprit, ceea ce este util pentru colectarea jurnalelor sau a configurației după ce un proces se încheie.
Utilizarea Docker Compose
Dacă proiectul tău folosește Compose, folosește numele serviciului cu docker compose cpîn loc să cauți un ID de container. De exemplu, copiază un fișier local într-un serviciu numit web:
Pentru a copia în cealaltă direcție, inversați căile:
docker compose cp web:/var/log/app.log ./backup/
Consultați referința oficială Docker compose cp pentru opțiuni precum selectarea unei replici atunci când un serviciu are mai multe containere.
Permisiuni și stocare persistentă
În mod implicit, fișierele copiate într-un container sunt deținute de utilizatorul său root și de grupul principal; fișierele copiate pe computer sunt deținute de utilizatorul care rulează Docker. Permisiunile sunt păstrate acolo unde este posibil. Folosește-l -apentru a păstra UID-ul și GID-ul sursei. Dacă o aplicație nu poate citi un fișier, verifică destinația și proprietatea acestuia, în loc să se acorde containerului privilegii.
Fișierele din stratul inscriptibil al unui container sunt eliminate odată cu containerul. Pentru datele care trebuie să persiste, utilizați un volum Docker sau o montare bind. Volumele sunt potrivite pentru datele persistente ale containerelor; montarea bind permite gazdei și containerului să acceseze aceleași fișiere. Dacă copiați pe o cale acoperită de o montare, modificați datele montate. Verificați mai întâi destinația. Consultați îndrumările Docker despre volume și montarea bind .
Depanare rapidă
„Nu există un astfel de container”: rulați docker ps -ași verificați numele sau ID-ul containerului.
„Nu există un astfel de fișier sau director”: verificați calea sursă și asigurați-vă că există directorul părinte al destinației. Căile containerelor încep de la /.
Folderul a ajuns cu un nivel mai adânc decât era de așteptat: folosește caracterul final /.pentru a copia doar conținutul directorului.
Permisiune refuzată: verificați dacă contul dvs. poate utiliza Docker și dacă utilizatorul aplicației poate citi sau scrie în destinație. Pe Linux, utilizați sudonumai dacă politica de acces Docker a sistemului dvs. o impune.
Fișierele dispar după curățare: salvați datele importante într-un volum sau o montare bind, nu doar în stratul inscriptibil al containerului.