Home
» LINUX
»
Hoe bestanden over te zetten van en naar een Docker-container
Hoe bestanden over te zetten van en naar een Docker-container
Gebruik het Docker- docker cpcommando om bestanden of mappen te kopiëren tussen uw lokale machine en een container. Het werkt in beide richtingen, kopieert mappen recursief en kan een actieve of gestopte container targeten. U hoeft geen shell in de container te openen of een tar-archief aan te maken voor een gewone kopie.
De basissyntaxis is docker cp SOURCE DESTINATION. Plaats de containernaam of -ID vóór een dubbele punt voor een containerpad: docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHkopieert naar een container, terwijl docker cp CONTAINER:CONTAINER_PATH LOCAL_PATHkopieert naar buiten. De Docker -documentatie over `docker cp` beschrijft de pad- en directoryregels.
1. Zoek de naam of ID van de container.
Voer dit uit vanuit een terminal waarin Docker-opdrachten de Docker Engine kunnen bereiken:
docker ps -a
docker psGeeft een lijst van actieve containers; door 'stopped' toe te voegen, -aworden ook gestopte containers weergegeven. Gebruik de waarde in de NAMESkolom of een container-ID in de onderstaande commando's. Een naam zoals webis gemakkelijk te hergebruiken; een ID is een exacte identificatie wanneer u containers wilt onderscheiden. U kunt de weergegeven velden controleren met `docker ps` / `docker container ls` .
Gebruik de containernaam of ID die wordt weergegeven door docker ps -a.
2. Kopieer een bestand van uw computer naar de container.
Voer dit commando uit docker cpop de machine waarvan u de bestanden wilt kopiëren. Kopieer bijvoorbeeld vanuit een projectmap met de volgende inhoud report.csvhet bestand naar /tmpde map in de container met de naam web:
docker cp ./report.csv web:/tmp/report.csv
Vervang dit ./report.csvdoor het lokale bestandspad, webde naam of ID van uw container en /tmp/report.csvhet bestemmingspad binnen de container. Containerpaden worden geïnterpreteerd vanuit de hoofdmap van de container, dus de schuine streep aan het begin is optioneel. Als de bestemming een bestaande map is, plaatst Docker het bestand daarin met behulp van de bronbestandsnaam.
Met dit commando wordt één hostbestand naar de container gekopieerd.
Docker kopieert mappen recursief. Als een map /etc/app/al bestaat, plaatst dit commando configde volgende inhoud erin:
docker cp ./config web:/etc/app/
Om alleen de inhoud van confignaar te kopiëren /etc/app/, voeg je /.aan het einde van het bronpad toe:
De /.extensie betekent dat de inhoud van de map wordt gekopieerd, in plaats van dat de bronmap wordt genest.
docker cp ./config/. web:/etc/app/
Docker maakt geen ontbrekende bovenliggende mappen aan. Maak eerst de bovenliggende map van de bestemming aan. Om een ontbrekende map in een draaiende container aan te maken, voert u het commando uit docker exec web mkdir -p /etc/appen kopieert u vervolgens de bestanden. docker execHet commando vereist een draaiende container; het commando docker cpzelf niet.
3. Kopieer een bestand vanuit de container naar uw computer.
Keer de volgorde van bron en bestemming om om een bestand op te halen. Maak eerst de lokale bestemmingsmap aan en kopieer vervolgens een logbestand uit de container:
De lokale bestemmingsmap moet al bestaan voordat u erin kopieert.
Je kunt een map op dezelfde manier ophalen. Voeg het volgende toe /.aan het bronpad van de container om de inhoud ervan rechtstreeks naar een bestaande lokale map te kopiëren:
docker cp web:/var/log/app/. ./backup/
Docker kan bestanden kopiëren vanuit een gestopte container, wat handig is voor het verzamelen van logbestanden of configuratiegegevens nadat een proces is beëindigd.
Docker Compose gebruiken
Als je project Compose gebruikt, gebruik dan de servicenaam in docker compose cpplaats van een container-ID op te zoeken. Kopieer bijvoorbeeld een lokaal bestand naar een service met de naam web:
Om in de andere richting te kopiëren, draai je de paden om:
docker compose cp web:/var/log/app.log ./backup/
Raadpleeg de officiële docker compose cp-referentie voor opties zoals het selecteren van een replica wanneer een service meerdere containers heeft.
Machtigingen en permanente opslag
Standaard zijn bestanden die naar een container worden gekopieerd eigendom van de root-gebruiker en de primaire groep van die container; bestanden die naar uw computer worden gekopieerd, zijn eigendom van de gebruiker die Docker uitvoert. Waar mogelijk worden machtigingen behouden. Gebruik deze optie -aom de bron-UID en GID te behouden. Als een app een bestand niet kan lezen, controleer dan de bestemming en het eigendom in plaats van de container privileged te maken.
Bestanden in de beschrijfbare laag van een container worden verwijderd wanneer de container wordt verwijderd. Voor gegevens die moeten blijven bestaan, gebruikt u een Docker-volume of een bind-mount. Volumes zijn geschikt voor persistente containergegevens; bind-mounts zorgen ervoor dat de host en de container toegang hebben tot dezelfde bestanden. Als u naar een pad kopieert dat door een mount wordt gedekt, wijzigt u de gemounte gegevens. Controleer daarom eerst de bestemming. Raadpleeg de Docker-richtlijnen voor volumes en bind-mounts .
Snelle probleemoplossing
"Container bestaat niet": voer het commando uit docker ps -aen controleer de naam of ID van de container.
“Bestand of map bestaat niet”: controleer het bronpad en zorg ervoor dat de bovenliggende map van de bestemming bestaat. Containerpaden beginnen bij /.
De map is een niveau dieper terechtgekomen dan verwacht: gebruik de achtervoeging /.om alleen de inhoud van de map te kopiëren.
Toegang geweigerd: controleer of uw account Docker mag gebruiken en of de applicatiegebruiker lees- of schrijfrechten heeft voor de bestemming. Gebruik dit op Linux sudoalleen als het Docker-toegangsbeleid van uw systeem dit vereist.
Bestanden verdwijnen na het opruimen: bewaar belangrijke gegevens in een volume of bind mount, niet alleen in de beschrijfbare laag van de container.