Kopieren von Dateien vom Host in den Docker-Container

1579

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:baseund 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:baseDocker-Images einen neuen Container erstellt und anschließend Dateien in diesen Container kopiert.

Wie kann ich Dateien vom Host in den Container kopieren?

user3001829
quelle
11
Wenn Sie nicht neu erstellen möchten, warum nicht " Docker Commit "? Das speichert Ihr Bild.
Berend de Boer
27
Nur eine Bemerkung zu einem Begriff, den niemand angesprochen hat: Behandeln Sie Container im Allgemeinen als "kurzlebig". Es gibt Anwendungsfälle zum Kopieren von Dateien in / aus einem laufenden Container (Testen, Prototyping). Wenn Sie sich jedoch in einer Position befinden, in der Sie mit Dockerfiles und / oder Compose nicht neu erstellen können, was Sie benötigen, befinden Sie sich möglicherweise an einem schlechten Ort. Im Allgemeinen möchten Sie Container nicht so sichern, als wären sie Betriebssystem- oder sogar VM-Objekte. Im Allgemeinen :-)
Scott Prive
Mögliches Duplikat des Kopierens von Dateien vom Docker-Container zum Host
Shubham

Antworten:

2674

Mit dem cpBefehl können Dateien kopiert werden.

Eine bestimmte Datei kann wie folgt in den Container kopiert werden:

docker cp foo.txt mycontainer:/foo.txt

Eine bestimmte Datei kann wie folgt aus dem Container kopiert werden:

docker cp mycontainer:/foo.txt foo.txt

Zur Verdeutlichung, mycontainerist ein Container - ID, nicht ein Bild ID.

Mehrere im Ordner enthaltene Dateien srckönnen wie folgt in den targetOrdner kopiert werden.

docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target

Referenz: Docker CLI-Dokumente fürcp

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.

0x7d7b
quelle
2
Beachten Sie auch, dass dies auf dem Host-VM oder dem Hauptbetriebssystem sein kann und entweder von Host zu Container oder von VM zu Host (oder Haupt-
Betriebssystem) funktioniert
7
In einer Docker-Datei können Sie das Schlüsselwort ADD verwenden, um während der Erstellungszeit Dateien hinzuzufügen.
0x7d7b
4
@ h3nrik COPYbevorzugt,ADD wenn zutreffend.
Franklin Yu
10
Das docker cpKopieren 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ützt
Ace.Yin
2
Kann ich mit Docker CP mehrere Dateien vom Host in den Container kopieren?
Yogesh
182
  1. Abrufen des Containernamens oder der kurzen Container-ID:

    $ docker ps
    
  2. Vollständige Container-ID abrufen:

    $ docker inspect -f   '{{.Id}}'  SHORT_CONTAINER_ID-or-CONTAINER_NAME
    
  3. Datei kopieren:

    $ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE
    

BEISPIEL:

$ docker ps

CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES

d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare

$ docker inspect -f   '{{.Id}}' cranky_pare

oder

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt
Solidleon
quelle
13
Für mich enthielt der Montagepfad des Hosts aufsnur a devicemapper. Der einfachste Weg, den Montagepfad für Container zu überprüfen (während er ausgeführt wird), besteht darin, den Befehl auszuführen mount.
Ihrio
3
Ich habe die obige Lösung ausprobiert. Die Dateien wurden in das Docker-spezifische Verzeichnis kopiert. Wenn ich jedoch Bash für Docker-Container verwende, werden die Dateien dort nicht angezeigt. Fehlt mir etwas?
AppleBud
2
Der neue Pfad ist / var / lib / docker / devicemapper / mnt / << id >> / rootfs /
mcuadros
4
Für mich ist es auf Docker 1.4.1 (aktuell aktuell)/var/lib/docker/aufs/diff/<id>/
user193130
3
Was ist mit armen MacOS-Benutzern? Das Mount-Verzeichnis ist /var/libfür mich. find / -name dockerwar auch nicht hilfreich.
Prayagupd
141

Am saubersten ist es, beim Starten des Containers ein Hostverzeichnis auf dem Container bereitzustellen:

{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile
Ben Davis
quelle
3
Wie können Sie Container ausführen? Ich dachte, man kann das nur mit einem Bild machen.
Pavel Zaitsev
Ich kann es nicht zum Laufen bringen, wenn ein Container vorhanden ist, der bereits ausgeführt wurde. Teer unten funktioniert gut.
Eino Mäkitalo
1
Die einzige Möglichkeit, wie dies für mich funktioniert hat, bestand darin, das Volume neben dem Ausführen des Images anzuhängen (den Container zu instanziieren). Endete mit:docker run -d -p -v /host/path:/mnt --name container_name image_name
Peter n
2
Das funktioniert bei mir nicht. Zumindest kann kein Container ausgeführt werden. Kann nur Bild ausführen
Shashank Hegde
1
Ich bin erstaunt, dass dies docker cpeine Einbahnstraße ist!
ThorSummoner
115

Das Folgende ist eine ziemlich hässliche Art, aber es funktioniert.

docker run -i ubuntu /bin/bash -c 'cat > file' < file
Erik
quelle
7
Das funktioniert super! Aber vergessen Sie nicht, die Änderung zu übernehmen : docker commit `docker ps -l -q` ubuntu-with-file. Andernfalls geht die Änderung verloren (verwenden Sie stattdessen einen beliebigen Namen ubuntu-with-file)
Michael_Scharf
@Erik: Wo befindet sich die Datei, wenn der Container ausgeführt wird?
Coanor
49
Zusätzlich können wir neue docker execFunktionen verwenden, um mit laufenden Containern zu arbeiten:docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
Mikl
17
@Mikl Ich denke, es sollte docker exec -i ...stattdessen sein -it, weil es kein TTY gibt, wenn aus einer Datei eingespeist wird .
z0r
4
Wenn Sie immer noch auf einer alten Version von Docker stecken (wie ich) und ein ganzes Verzeichnis kopieren möchten, können Sie dies tun: 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'
eahanson
43

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:

$ docker ps
CONTAINER ID        IMAGE                        COMMAND             CREATED             STATUS              PORTS                   NAMES
b9b7400ddd8f        ubuntu:latest                "/bin/bash"         2 seconds ago       Up 2 seconds                                elated_hodgkin

Im obigen Beispiel können wir entweder b9b7400ddd8foder verwenden elated_hodgkin.

Wenn Sie alles /tmp/somefilesauf dem Host /var/wwwin den Container kopieren möchten :

$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www

Wir können dann /bin/bashim Container ausführen und überprüfen, ob es funktioniert hat:

$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1  file2
adean
quelle
Funktioniert hervorragend mit Docker 1.16 unter Centos 7.4. Großartige innovative Idee.
Dudi Boy
41
  1. Erstellen Sie eine neue Docker-Datei und verwenden Sie das vorhandene Image als Basis.

    FROM myName/myImage:latest
    
    ADD myFile.py bin/myFile.py
    
  2. Dann bauen Sie den Container:

    docker build .
    
RustyShackleford
quelle
2
Das hat bei mir funktioniert. Nichts anderes. Vielen Dank!
Owen
Es wird ein neues Bild erstellt, nicht direkt ein neuer Container. Wenn Sie dieses Image wiederverwenden, während myFile.py wie geändert ist, wird die ältere Version der Datei verwendet, es sei denn, Sie erstellen das Image neu.
Guillaume Lebreton
Ich finde das nur dann am schnellsten, wenn Sie auf einem Remote-Server testen.
Dominik Krulak
Nach dieser die meisten Menschen sollten COPY verwenden , anstatt ADD. Für lokale Dateien (wie in diesem Beispiel) sind sie jedoch gleichwertig.
hoosierEE
39

Die Lösung ist unten angegeben,

Aus der Docker-Shell,

root@123abc:/root#  <-- get the container ID

Vom Gastgeber

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

Die Datei wird direkt an den Ort kopiert, an dem sich der Container im Dateisystem befindet.

durchbohren
quelle
10
Gute Antwort. In neueren Docker-Versionen wurde der Pfad in / var / lib / docker / aufs / mnt / umbenannt
Alex Volkov
Der Devicemapper-Pfad scheint nicht mit Fedora 1.6 für Fedora zu funktionieren. Haben Sie es als separates Q, stackoverflow.com/questions/29939419/… , veröffentlicht , wären Kommentare willkommen .
Yogesh_D
33

Typischerweise gibt es drei Arten:

  1. Von einem Container zum Host

    docker cp container_id:./bar/foo.txt .
    

dev1

  1. Vom Host zu einem Container

    docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev2

  1. Von einem Behälter zu einem Behälter mischt 1 und 2

    docker cp container_id1:./bar/foo.txt .
    
    docker exec -i container_id2 sh -c 'cat > ./bar/foo.txt' < ./foo.txt
    

dev3

Ali Hallaji
quelle
6
Docker CP funktioniert in beide Richtungen. Sie müssen nicht ausführen, katzen und umleiten. Docker cp host_file.txt Container: / Pfad /
TBM
32

Eine andere Lösung zum Kopieren von Dateien in einen laufenden Container ist die Verwendung von tar:

tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x

Kopiert die Datei foo.shin /tmpden Container.

Bearbeiten: Reduntant entfernen -f, dank Maartens Kommentar.

Joemat
quelle
Dies ist gut, wenn Sie ein ganzes Verzeichnis senden müssen. Für eine einzelne Datei ist Eriks Antwort einfacher.
Kelvin
1
@ Kelvin: Aber tar behält auch Dateiattribute und Namen bei. Dies bedeutet unter anderem, dass Sie den Namen nur einmal eingeben müssen (und dort die Tab-Vervollständigung von Ihrer Shell erhalten). Ich würde also sagen, dass Teer tatsächlich einfacher ist, solange er im Container installiert ist.
Maarten
1
Das -f -ist allerdings etwas redundant. Standardmäßig wird ohnehin in stdout geschrieben.
Maarten
Dies bedeutet, dass es eine Host-Abhängigkeit von tar
cellige
Sie haben Recht - Sie müssen Teer auf dem Host und im Container installieren. Heutzutage ist die Verwendung von Docker CP die bessere Lösung.
Joemat
24

So kopieren Sie eine Datei vom Host in den laufenden Container

docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH

Basierend auf Eriks Antwort und den Kommentaren von Mikl und z0r.

Andrea
quelle
Die akzeptierten Lösungen stören manchmal das Einrücken von Dateien beim Übertragen auf laufende Container. Dies funktioniert perfekt für solche Fälle
Träume
15

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:

docker cp /root/some-file.txt some-docker-container:/root

Dadurch wird die Datei some-file.txtim Verzeichnis /rootauf Ihrem Hostcomputer some-docker-containerin 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? .

Hiro.Protagonist
quelle
15

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 cplöste diese Aufgabe.

docker cp c:\path\to\local\file container_name:/path/to/target/dir/

Wie bekomme ich container_name?

 docker ps 

Es gibt einen NAMESAbschnitt. Verwenden Sie keine IMAGE.

Aerin
quelle
12

Geben Sie den folgenden Befehl ein, um Dateien / Ordner zwischen einem Container und dem lokalen Dateisystem zu kopieren:

docker cp {SOURCE_FILE} {DESTINATION_CONTAINER_ID}:/{DESTINATION_PATH}

Zum Beispiel,

docker cp /home/foo container-id:/home/dir

Geben Sie den angegebenen Befehl ein, um die Contianer-ID abzurufen:

docker ps

Der obige Inhalt stammt von docker.com .

betenagupd
quelle
8

Angenommen, der Container wird bereits ausgeführt, geben Sie den folgenden Befehl ein:

# cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"

Führen Sie den Container aus, um Dateien über ein freigegebenes Verzeichnis freizugeben, indem Sie den folgenden Befehl eingeben:

# docker run -v /path/to/host/dir:/path/to/container/dir ...

Hinweis: Probleme mit Berechtigungen können auftreten, da die Benutzer des Containers nicht mit den Benutzern des Hosts identisch sind.

Johndodo
quelle
1
Zusätzlich:docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/
Mikl
2
Beachten Sie, dass catdies nach dem Beenden nicht beendet wird. Wenn es Ihnen wichtig ist (wenn Sie Bash-Skripte kopieren, weigert sich Bash, sie auszuführen), sollten Sie lsof | grep yourfilenameden catProzess ausführen und beenden , der die besagte Datei enthält.
Johndodo
Danke! Toller Tipp. Können Sie mir bitte sagen, wie ich diesen Prozess mit einem Befehl beenden kann? So etwas wie kill $(lsof | grep /path/to/file | sed ...). Ich werde für Ihre Hilfe dankbar sein
Mikl
kill $(docker top CONTAINERNAME | sed -n '/cat$/p' | sed 's/^root[^0-9]\+\([0-9]\+\).*$/\1/')
Mikl
8

Dies ist der Befehl zum Kopieren von Daten von Docker auf den Host:

docker cp container_id:file path/filename /hostpath

docker cp a13fb9c9e674:/tmp/dgController.log /tmp/

Unten finden Sie den Befehl zum Kopieren von Daten vom Host zum Docker:

docker cp a.txt ccfbeb35116b:/home/
Maninder
quelle
7

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/

0x3bfc
quelle
5

tarund docker cpsind eine gute Kombination, um alles in ein Verzeichnis zu kopieren.

Erstellen Sie einen Datenvolumencontainer

docker create --name dvc --volume /path/on/container cirros

So behalten Sie die Verzeichnishierarchie bei

tar -c -C /path/on/local/machine . | docker cp - dvc:/path/on/container

Überprüfe deine Arbeit

docker run --rm --volumes-from dvc cirros ls -al /path/on/container
Everett Toews
quelle
5

Wenn der Host CentOS oder Fedora ist, gibt es einen Proxy, der NICHT vorhanden ist /var/lib/docker/aufs, aber unter /proc:

cp -r /home/user/mydata/* /proc/$(docker inspect --format "{{.State.Pid}}" <containerid>)/root

Dieses cmd kopiert den gesamten Inhalt des dataVerzeichnisses in den /Container mit der ID "containerid".

Abdennour TOUMI
quelle
Dies gilt nicht nur für Redhat: Es funktioniert auch unter Debian. (vielleicht alle Gnu / Linux mit /proc). Erweitern Sie auch den Pfad, um die Datei an einem anderen Ort abzulegen, nicht nur im Stammverzeichnis.
Strg-Alt-Delor
5

Falls jemandem wie mir nicht klar ist, was mycontainerin @ h3nrik Antwort bedeutet, ist es tatsächlich die Container-ID. So kopieren Sie eine Datei WarpSquare.mp4in die /app/example_scenes/1440p60ich von einem verlassen Docker Container zu aktuellen Ordner verwendet , um dieses.

docker cp `docker ps -q -l`:/app/example_scenes/1440p60/WarpSquare.mp4 .

Dabei docker ps -q -lwird die Container-ID der zuletzt beendeten Instanz abgerufen. Falls es sich nicht um einen verlassenen Container handelt, können Sie ihn über docker container lsoder abrufendocker ps

ishandutta2007
quelle
1
Sie können IDs von verlassenen Containern mit docker ps -aoder auflisten docker container ls -a.
0x7d7b
4

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 COPYBefehl verwenden, mit dem DockerfileSie das Bild erstellen.

Siehe die Dokumentation .

Klas Mellbourn
quelle
4

Sie können einfach die IP-Adresse Ihres lokalen Computers mit verfolgen

ifconfig

Dann geben Sie einfach Ihren Docker-Container ein und geben Sie ein

scp user_name@ip_address:/path_to_the_file destination

In jedem Fall, wenn Sie keinen SSH-Client und -Server installiert haben, installieren Sie ihn einfach mit:

sudo apt-get install openssh-server
Harshit Anand
quelle
Vielen Dank, es hat gut für mich funktioniert. Außerdem fand ich es effizienter als auf andere Weise
user1314742
Dies ist eine schreckliche Lösung in Bezug auf die Sicherheit.
4

Dies ist ein Onliner zum Kopieren einer einzelnen Datei, während ein Tomcat-Container ausgeführt wird.

docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

Dadurch wird die Kriegsdatei in das Webapps-Verzeichnis kopiert und Ihre App wird in kürzester Zeit ausgeführt.

karthik101
quelle
1
-v wird gemountet (dh einen Link erstellen), nicht kopieren
Vitaliy Ulantikov
Der Unterschied im Ergebnis besteht darin, dass durch das Mounten der vorherige Containerinhalt ausgeblendet wird. Wenn Sie beispielsweise einen Hostordner in einen Containerordner mounten, wird der Inhalt des vorherigen Containerordners nicht mehr
angezeigt
4

Container-Up-Syntax:

 docker run -v /HOST/folder:/Container/floder 

In der Docker-Datei

COPY hom* /myFolder/        # adds all files starting with "hom"
COPY hom?.txt /myFolder/    # ? is replaced with any single character, e.g., "home.txt"
Isura Nimalasiri
quelle
3

Der beste Weg, um Dateien in den Container zu kopieren, den ich gefunden habe, ist das Mounten eines Verzeichnisses auf dem Host mit der -vOption des Docker-Befehls run.

Prakash Varandani
quelle
3

Es gibt gute Antworten, aber zu spezifisch. Ich finde heraus, dass dies docker psein guter Weg ist, um die Container-ID zu erhalten, an der Sie interessiert sind

mount | grep <id>

um zu sehen, wo das Volume gemountet ist. Das ist

/var/lib/docker/devicemapper/mnt/<id>/rootfs/

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 -vist nicht immer praktisch.

akostadinov
quelle
3

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:

su -
cd /var/lib/docker
ls -palR > /home/user/dockerfilelist.txt

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:

docker ps -a
docker start -i containerid

Ich denke, das ist nützlich, wenn Sie mit einem Befehl wie nichts benannt haben

docker run -it registry.videolan.org:5000/vlc-debian-win64 /bin/bash

Sicher die Hacker-Methode, aber na und!

Colin Lamarre
quelle
3
docker cp SRC_PATH CONTAINER_ID:DEST_PATH

Zum Beispiel möchte ich meine Datei xxxx / download / jenkins nach tomcat kopieren

Ich fange an, die ID des Containers Tomcat zu erhalten

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
63686740b488        tomcat              "catalina.sh run"   12 seconds ago      Up 11 seconds       0.0.0.0:8080->8080/tcp   peaceful_babbage

docker cp xxxx/download/jenkins.war  63686740b488:usr/local/tomcat/webapps/
Mourad MAMASSI
quelle
2

Meine Lieblingsmethode:

BEHÄLTER:

CONTAINER_ID=$(docker ps | grep <string> | awk '{ print $1 }' | xargs docker inspect -f '{{.Id}}')

file.txt

mv -f file.txt /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/root/file.txt

oder

mv -f file.txt /var/lib/docker/aufs/mnt/$CONTAINER_ID/rootfs/root/file.txt
user3159411
quelle
Der Devicemapper-Pfad scheint nicht mit Fedora 1.6 für Fedora zu funktionieren. Haben Sie es als separates Q, stackoverflow.com/questions/29939419/… , veröffentlicht , würden wir uns über Kommentare freuen .
Yogesh_D
2

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.

h.aittamaa
quelle
Dies scheint ein Sicherheitsrisiko zu sein und der Zugangsalptraum wartet darauf, geschehen zu können. Wie können Sie von Ihrem Image aus auf das Git-Repository zugreifen? Selbst wenn es sich um ein öffentliches Repository handelt, gehen Sie davon aus, dass der Host, auf dem Ihr Container ausgeführt wird, Zugriff auf dieses Repo hat.
TBB
Ich stimme Ihnen zu, wenn Git im Docker-Container verwendet wird. Aber in unserem Fall läuft das Skript von der Host-Maschine
h.aittamaa