Ich versuche, eine Sicherungs- und Wiederherstellungslösung für die Docker-Container zu erstellen, mit denen wir arbeiten.
Ich habe ein Docker-Basis-Image, das ich erstellt habe, ubuntu:base
und möchte es nicht jedes Mal mit einer Docker-Datei neu erstellen, um Dateien hinzuzufügen.
Ich möchte ein Skript erstellen, das vom Host-Computer ausgeführt wird und mithilfe des ubuntu:base
Docker-Images einen neuen Container erstellt und anschließend Dateien in diesen Container kopiert.
Wie kann ich Dateien vom Host in den Container kopieren?
docker
docker-container
user3001829
quelle
quelle
Antworten:
Mit dem
cp
Befehl können Dateien kopiert werden.Eine bestimmte Datei kann wie folgt in den Container kopiert werden:
Eine bestimmte Datei kann wie folgt aus dem Container kopiert werden:
Zur Verdeutlichung,
mycontainer
ist ein Container - ID, nicht ein Bild ID.Mehrere im Ordner enthaltene Dateien
src
können wie folgt in dentarget
Ordner kopiert werden.Referenz: Docker CLI-Dokumente für
cp
In Docker-Versionen vor 1.8 war es nur möglich, Dateien aus einem Container auf den Host zu kopieren. Nicht vom Host zu einem Container.
quelle
COPY
bevorzugt,ADD
wenn zutreffend.docker cp
Kopieren vom Container zum Host funktioniert gut, aber wenn es zum Kopieren von Dateien vom Host zum Container verwendet wird, hat dies keine Auswirkung ... weiß jemand warum? Docker-Version: Docker-Version 1.10.3, Build cb079f6-nicht unterstütztAbrufen des Containernamens oder der kurzen Container-ID:
Vollständige Container-ID abrufen:
Datei kopieren:
BEISPIEL:
oder
quelle
aufs
nur adevicemapper
. Der einfachste Weg, den Montagepfad für Container zu überprüfen (während er ausgeführt wird), besteht darin, den Befehl auszuführenmount
./var/lib/docker/aufs/diff/<id>/
/var/lib
für mich.find / -name docker
war auch nicht hilfreich.Am saubersten ist es, beim Starten des Containers ein Hostverzeichnis auf dem Container bereitzustellen:
quelle
docker run -d -p -v /host/path:/mnt --name container_name image_name
docker cp
eine Einbahnstraße ist!Das Folgende ist eine ziemlich hässliche Art, aber es funktioniert.
quelle
docker commit `docker ps -l -q` ubuntu-with-file
. Andernfalls geht die Änderung verloren (verwenden Sie stattdessen einen beliebigen Namenubuntu-with-file
)docker exec
Funktionen verwenden, um mit laufenden Containern zu arbeiten:docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
docker exec -i ...
stattdessen sein-it
, weil es kein TTY gibt, wenn aus einer Datei eingespeist wird .tar -c -v -f - /path/to/host/directory | docker exec -i <container-name> bash -c 'tar -x -v --strip-components 1 -f - -C /path/to/container/directory'
Wenn Sie dies für einen laufenden Container tun müssen, können Sie Docker Exec verwenden (hinzugefügt in 1.3).
Suchen Sie zuerst den Namen oder die ID des Containers:
Im obigen Beispiel können wir entweder
b9b7400ddd8f
oder verwendenelated_hodgkin
.Wenn Sie alles
/tmp/somefiles
auf dem Host/var/www
in den Container kopieren möchten :Wir können dann
/bin/bash
im Container ausführen und überprüfen, ob es funktioniert hat:quelle
Erstellen Sie eine neue Docker-Datei und verwenden Sie das vorhandene Image als Basis.
Dann bauen Sie den Container:
quelle
Die Lösung ist unten angegeben,
Aus der Docker-Shell,
Vom Gastgeber
Die Datei wird direkt an den Ort kopiert, an dem sich der Container im Dateisystem befindet.
quelle
Typischerweise gibt es drei Arten:
Von einem Container zum Host
Vom Host zu einem Container
Von einem Behälter zu einem Behälter mischt 1 und 2
quelle
Eine andere Lösung zum Kopieren von Dateien in einen laufenden Container ist die Verwendung von tar:
Kopiert die Datei
foo.sh
in/tmp
den Container.Bearbeiten: Reduntant entfernen
-f
, dank Maartens Kommentar.quelle
-f -
ist allerdings etwas redundant. Standardmäßig wird ohnehin in stdout geschrieben.So kopieren Sie eine Datei vom Host in den laufenden Container
Basierend auf Eriks Antwort und den Kommentaren von Mikl und z0r.
quelle
Mit Docker 1.8
docker cp
können Dateien vom Host in den Container kopiert werden. Weitere Informationen finden Sie im Docker-Blogbeitrag Announcing Docker 1.8: Content Trust, Toolbox und Updates für Registrierung und Orchestrierung .quelle
docker cp foo.txt mycontainer:/foo.txt
Dies ist eine direkte Antwort auf die Frage 'Kopieren von Dateien vom Host in den Docker-Container', die in dieser Frage im Titel gestellt wird.
Versuchen Sie es
docker cp
. Dies ist der einfachste Weg und funktioniert sogar auf meinem Mac. Verwendungszweck:Dadurch wird die Datei
some-file.txt
im Verzeichnis/root
auf Ihrem Hostcomputersome-docker-container
in den im Verzeichnis genannten Docker-Container kopiert/root
. Es kommt der sicheren Kopiersyntax sehr nahe. Und wie im vorherigen Beitrag gezeigt, können Sie es umgekehrt verwenden. Das heißt, Sie kopieren auch Dateien aus dem Container auf den Host.Und bevor Sie diesen Beitrag verlinken, geben Sie bitte ein
docker cp --help
. Das Lesen der Dokumentation kann manchmal sehr hilfreich sein ...Wenn Ihnen dies nicht gefällt und Sie Datenmengen in Ihrem bereits erstellten und laufenden Container haben möchten, ist die Neuerstellung heute Ihre einzige Option. Siehe auch Wie kann ich einem vorhandenen Docker-Container ein Volume hinzufügen? .
quelle
Ich habe die meisten (upvoted) Lösungen hier ausprobiert, aber in Docker 17.09 (2018) gibt es keinen Ordner mehr / var / lib / docker / aufs.
Dies einfach
docker cp
löste diese Aufgabe.Wie bekomme ich container_name?
Es gibt einen
NAMES
Abschnitt. Verwenden Sie keineIMAGE
.quelle
Geben Sie den folgenden Befehl ein, um Dateien / Ordner zwischen einem Container und dem lokalen Dateisystem zu kopieren:
Zum Beispiel,
Geben Sie den angegebenen Befehl ein, um die Contianer-ID abzurufen:
Der obige Inhalt stammt von docker.com .
quelle
Angenommen, der Container wird bereits ausgeführt, geben Sie den folgenden Befehl ein:
Führen Sie den Container aus, um Dateien über ein freigegebenes Verzeichnis freizugeben, indem Sie den folgenden Befehl eingeben:
Hinweis: Probleme mit Berechtigungen können auftreten, da die Benutzer des Containers nicht mit den Benutzern des Hosts identisch sind.
quelle
docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
cat
dies nach dem Beenden nicht beendet wird. Wenn es Ihnen wichtig ist (wenn Sie Bash-Skripte kopieren, weigert sich Bash, sie auszuführen), sollten Sielsof | grep yourfilename
dencat
Prozess ausführen und beenden , der die besagte Datei enthält.kill $(lsof | grep /path/to/file | sed ...)
. Ich werde für Ihre Hilfe dankbar seinkill $(docker top CONTAINERNAME | sed -n '/cat$/p' | sed 's/^root[^0-9]\+\([0-9]\+\).*$/\1/')
Dies ist der Befehl zum Kopieren von Daten von Docker auf den Host:
Unten finden Sie den Befehl zum Kopieren von Daten vom Host zum Docker:
quelle
In einer Docker-Umgebung befinden sich alle Container im Verzeichnis:
/var/lib/docker/aufs/required-docker-id/
Geben Sie den folgenden Befehl ein, um das Quellverzeichnis / die Quelldatei in einen beliebigen Teil des Containers zu kopieren:
sudo cp -r mydir/ /var/lib/docker/aufs/mnt/required-docker-id/mnt/
quelle
tar
unddocker cp
sind eine gute Kombination, um alles in ein Verzeichnis zu kopieren.Erstellen Sie einen Datenvolumencontainer
So behalten Sie die Verzeichnishierarchie bei
Überprüfe deine Arbeit
quelle
Wenn der Host CentOS oder Fedora ist, gibt es einen Proxy, der NICHT vorhanden ist
/var/lib/docker/aufs
, aber unter/proc
:Dieses cmd kopiert den gesamten Inhalt des
data
Verzeichnisses in den/
Container mit der ID "containerid".quelle
/proc
). Erweitern Sie auch den Pfad, um die Datei an einem anderen Ort abzulegen, nicht nur im Stammverzeichnis.Falls jemandem wie mir nicht klar ist, was
mycontainer
in @ h3nrik Antwort bedeutet, ist es tatsächlich die Container-ID. So kopieren Sie eine DateiWarpSquare.mp4
in die/app/example_scenes/1440p60
ich von einem verlassen Docker Container zu aktuellen Ordner verwendet , um dieses.Dabei
docker ps -q -l
wird die Container-ID der zuletzt beendeten Instanz abgerufen. Falls es sich nicht um einen verlassenen Container handelt, können Sie ihn überdocker container ls
oder abrufendocker ps
quelle
docker ps -a
oder auflistendocker container ls -a
.Viele, die diese Frage finden, haben möglicherweise das Problem, Dateien in ein Docker-Image zu kopieren, während es erstellt wird (ich habe es getan).
In diesem Fall können Sie den
COPY
Befehl verwenden, mit demDockerfile
Sie das Bild erstellen.Siehe die Dokumentation .
quelle
Sie können einfach die IP-Adresse Ihres lokalen Computers mit verfolgen
Dann geben Sie einfach Ihren Docker-Container ein und geben Sie ein
In jedem Fall, wenn Sie keinen SSH-Client und -Server installiert haben, installieren Sie ihn einfach mit:
quelle
Dies ist ein Onliner zum Kopieren einer einzelnen Datei, während ein Tomcat-Container ausgeführt wird.
Dadurch wird die Kriegsdatei in das Webapps-Verzeichnis kopiert und Ihre App wird in kürzester Zeit ausgeführt.
quelle
Container-Up-Syntax:
In der Docker-Datei
quelle
Der beste Weg, um Dateien in den Container zu kopieren, den ich gefunden habe, ist das Mounten eines Verzeichnisses auf dem Host mit der
-v
Option des Docker-Befehls run.quelle
Es gibt gute Antworten, aber zu spezifisch. Ich finde heraus, dass dies
docker ps
ein guter Weg ist, um die Container-ID zu erhalten, an der Sie interessiert sindum zu sehen, wo das Volume gemountet ist. Das ist
Für mich kann es jedoch je nach Betriebssystem und Konfiguration ein anderer Pfad sein. Kopieren Sie nun einfach Dateien in diesen Pfad.
Die Verwendung
-v
ist nicht immer praktisch.quelle
Ich habe gerade angefangen, Docker zum Kompilieren von VLC zu verwenden. Folgendes können Sie tun, um Dateien aus Containern hin und her zu kopieren:
Suchen Sie nach einer vertrauten Datei in diesem Text und Sie haben den Ordner, CD als root und voila! Kopieren Sie alles, was Sie wollen.
Möglicherweise gibt es einen Pfad mit "zusammengeführt". Ich denke, Sie möchten den mit "diff".
Auch wenn Sie den Container verlassen und wieder dort sein möchten, wo Sie aufgehört haben:
Ich denke, das ist nützlich, wenn Sie mit einem Befehl wie nichts benannt haben
Sicher die Hacker-Methode, aber na und!
quelle
Zum Beispiel möchte ich meine Datei xxxx / download / jenkins nach tomcat kopieren
Ich fange an, die ID des Containers Tomcat zu erhalten
quelle
Meine Lieblingsmethode:
BEHÄLTER:
file.txt
oder
quelle
Meiner Meinung nach müssen Sie keine Dateien in das Bild kopieren, aber Sie können GIT oder SVN für Ihre Dateien verwenden und dann ein Volume festlegen, das mit einem lokalen Ordner synchronisiert ist. Verwenden Sie beim Ausführen des Containers ein Skript, das überprüfen kann, ob Daten bereits im lokalen Ordner vorhanden sind, wenn Sie sie nicht aus dem GIT-Repository kopieren. Das macht Ihr Bild sehr leicht.
quelle