Startseite
» LINUX
»
Wie man Dateien in und aus einem Docker-Container überträgt
Wie man Dateien in und aus einem Docker-Container überträgt
Verwenden Sie den Docker- docker cpBefehl, um Dateien oder Verzeichnisse zwischen Ihrem lokalen Rechner und einem Container zu kopieren. Er funktioniert in beide Richtungen, kopiert Verzeichnisse rekursiv und kann sowohl auf laufende als auch auf gestoppte Container zugreifen. Sie müssen weder eine Shell im Container öffnen noch ein TAR-Archiv für einen einfachen Kopiervorgang erstellen.
Die grundlegende Syntax lautet : `cp` docker cp SOURCE DESTINATION. Setzen Sie den Containernamen oder die Container-ID vor einen Doppelpunkt, um einen Containerpfad anzugeben: ` docker cp LOCAL_PATH CONTAINER:CONTAINER_PATHcp` kopiert in einen Container, `cp` docker cp CONTAINER:CONTAINER_PATH LOCAL_PATHkopiert aus einem Container. Die Pfad- und Verzeichnisregeln sind in der Docker -Referenz zu `docker cp` dokumentiert.
1. Containernamen oder -ID ermitteln
Führen Sie diesen Befehl in einem Terminal aus, in dem Docker-Befehle die Docker Engine erreichen können:
docker ps -a
docker psDie Liste zeigt laufende Container an; durch Hinzufügen -awerden auch gestoppte Container angezeigt. Verwenden Sie den Wert in der NAMESSpalte oder eine Container-ID in den folgenden Befehlen. Ein Name wie „ webcontainer“ lässt sich leicht wiederverwenden; eine ID ist ein eindeutiger Bezeichner, wenn Sie Container unterscheiden müssen. Sie können die angezeigten Felder mit `docker ps` / `docker container ls` überprüfen .
Verwenden Sie den Containernamen oder die Container-ID, die von angezeigt wird docker ps -a.
2. Kopieren Sie eine Datei von Ihrem Computer in den Container
Führen Sie docker cpden Befehl auf dem Rechner aus, dessen Dateien Sie kopieren möchten. Kopieren Sie beispielsweise aus einem Projektordner, der die Datei enthält report.csv, diese /tmpin den Container mit dem Namen web:
docker cp ./report.csv web:/tmp/report.csv
Ersetzen Sie ./report.csv<lokaler Dateipfad> durch den lokalen Dateipfad, web<Containername oder -ID> durch den Namen oder die ID Ihres Containers und /tmp/report.csv<Zielpfad> durch den Zielpfad innerhalb des Containers. Containerpfade werden vom Stammverzeichnis des Containers aus interpretiert, daher ist der führende Schrägstrich optional. Wenn das Zielverzeichnis bereits existiert, platziert Docker die Datei dort unter Verwendung des Quelldateinamens.
Dieser Befehl kopiert eine Hostdatei in den Container.
Docker kopiert Verzeichnisse rekursiv. Falls diese /etc/app/bereits existieren, fügt dieser Befehl sie configdarin ein:
docker cp ./config web:/etc/app/
Um nur den Inhalt von configin zu kopieren /etc/app/, fügen Sie /.am Ende des Quellpfads Folgendes ein:
Das /.Suffix bedeutet, dass der Verzeichnisinhalt kopiert wird, anstatt das Quellverzeichnis einzubetten.
docker cp ./config/. web:/etc/app/
Docker erstellt keine fehlenden übergeordneten Verzeichnisse. Erstellen Sie zuerst das übergeordnete Verzeichnis des Ziels. Um einen fehlenden Ordner in einem laufenden Container zu erstellen, führen Sie `docker build` aus docker exec web mkdir -p /etc/appund kopieren Sie anschließend die Dateien. `docker build` docker execerfordert einen laufenden Container; `docker build` docker cpnicht.
3. Kopieren Sie eine Datei aus dem Container auf Ihren Computer.
Um eine Datei abzurufen, kehren Sie die Reihenfolge von Quell- und Zielordner um. Erstellen Sie zuerst den lokalen Zielordner und kopieren Sie dann eine Protokolldatei aus dem Container:
Der lokale Zielordner muss vor dem Kopieren existieren.
Sie können ein Verzeichnis auf die gleiche Weise abrufen. Fügen Sie /.dem Quellpfad des Containers hinzu, um dessen Inhalt direkt in ein vorhandenes lokales Verzeichnis zu kopieren:
docker cp web:/var/log/app/. ./backup/
Docker kann Dateien aus einem gestoppten Container kopieren, was nützlich ist, um Protokolle oder Konfigurationen nach dem Beenden eines Prozesses zu sammeln.
Docker Compose verwenden
Wenn Ihr Projekt Compose verwendet, nutzen Sie den Dienstnamen anstelle docker compose cpder Container-ID. Kopieren Sie beispielsweise eine lokale Datei in einen Dienst mit dem Namen web:
Um in die andere Richtung zu kopieren, kehren Sie die Pfade um:
docker compose cp web:/var/log/app.log ./backup/
In der offiziellen Docker Compose cp-Referenz finden Sie Optionen wie die Auswahl einer Replik, wenn ein Dienst mehrere Container hat.
Berechtigungen und dauerhafte Speicherung
Standardmäßig gehören Dateien, die in einen Container kopiert werden, dem Root-Benutzer und der zugehörigen Gruppe; Dateien, die auf Ihren Computer kopiert werden, gehören dem Benutzer, der Docker ausführt. Berechtigungen bleiben nach Möglichkeit erhalten. Verwenden Sie die Option, -aum die Quell-UID und -GID beizubehalten. Kann eine Anwendung eine Datei nicht lesen, überprüfen Sie deren Ziel und Eigentümerschaft, anstatt dem Container privilegierte Berechtigungen zu erteilen.
Dateien im beschreibbaren Bereich eines Containers werden mit dem Container gelöscht. Für Daten, die dauerhaft gespeichert werden müssen, verwenden Sie ein Docker-Volume oder eine Bind-Mount-Verbindung. Volumes eignen sich für persistente Containerdaten; Bind-Mounts ermöglichen Host und Container den Zugriff auf dieselben Dateien. Wenn Sie Daten in einen Pfad kopieren, der durch eine Mount-Verbindung abgedeckt ist, ändern Sie die eingebundenen Daten. Überprüfen Sie daher vorher das Zielverzeichnis. Weitere Informationen finden Sie in der Docker-Dokumentation zu Volumes und Bind-Mounts .
Schnelle Fehlerbehebung
„Kein solcher Container“: Führen Sie den Befehl aus docker ps -aund überprüfen Sie den Containernamen oder die Container-ID.
„Datei oder Verzeichnis nicht gefunden“: Überprüfen Sie den Quellpfad und stellen Sie sicher, dass das übergeordnete Verzeichnis des Ziels existiert. Containerpfade beginnen bei /.
Der Ordner landete eine Ebene tiefer als erwartet: Verwenden Sie den nachfolgenden Befehl /., um nur den Verzeichnisinhalt zu kopieren.
Zugriff verweigert: Überprüfen Sie, ob Ihr Konto Docker verwenden darf und ob der Anwendungsbenutzer Lese- und Schreibrechte für das Zielverzeichnis hat. Unter Linux verwenden Sie Docker sudonur, wenn die Docker-Zugriffsrichtlinie Ihres Systems dies erfordert.
Nach der Bereinigung gehen Dateien verloren: Wichtige Daten sollten in einem Volume oder per Bind-Mount gespeichert werden, nicht nur in der beschreibbaren Schicht des Containers.