Ich habe einen Docker-Container, den ich einfach erstellt habe, indem ich Docker unter Ubuntu installiert habe und Folgendes getan habe:
sudo docker run -i -t ubuntu /bin/bash
Ich begann sofort mit der Installation von Java und einigen anderen Tools, verbrachte einige Zeit damit und stoppte den Container
exit
Dann wollte ich ein Volume hinzufügen und stellte fest, dass dies nicht so einfach ist, wie ich es mir vorgestellt hatte. Wenn ich sudo docker -v /somedir run ...
dann verwende, erhalte ich einen neuen Container, also müsste ich Java installieren und das tun, was ich bereits getan habe, um zu einem Container mit einem gemounteten Volume zu gelangen.
Die gesamte Dokumentation zum Mounten eines Ordners vom Host scheint zu implizieren, dass das Mounten eines Volumes beim Erstellen eines Containers durchgeführt werden kann. Die einzige Option, die ich vermeiden muss, um einen neuen Container von Grund auf neu zu konfigurieren, besteht darin, den vorhandenen Container in ein Repository zu übertragen und diesen als Basis für einen neuen zu verwenden, während das Volume bereitgestellt wird.
Ist dies tatsächlich die einzige Möglichkeit, einem vorhandenen Container ein Volume hinzuzufügen?
docker
Tag gepostet werden, sind 34k + , was weit mehr ist als diese beiden Websites stackoverflow.com/questions/tagged/dockerAntworten:
Sie können Ihren vorhandenen Container festschreiben (dh aus den Änderungen des Containers ein neues Image erstellen) und es dann mit Ihren neuen Bereitstellungen ausführen.
Beispiel:
Wenn alles in Ordnung ist, stoppen Sie Ihren alten Container und verwenden Sie diesen neuen.
Das ist es :)
quelle
newnameofcontainer
dass dies wahrscheinlich benannt werden solltenew_image_name
- weildocker commit
ein neues Image auf Ihrem System erstellt wird. Wenn Sie dann im Folgenden eine ausführen, verwendendocker run
Sie tatsächlich den Namen des Bildes , von dem aus Sie einen neuen Container ausführen möchten. Das Obige funktioniert, wollte aber nur für andere klarstellen, dass der Platzhalter newnameofcontainer oben tatsächlich der Name für ein neues Bild ist. Vielen Dank! tolle Antwort. Oh, Sie können das neu erstellte Bild aus dem ersten Docker-Commit-Befehl mitdocker image ls
docker run -v /srv/a:/tmp ubuntu:14.04
gut.Wir haben keine Möglichkeit, dem laufenden Container Volumen hinzuzufügen, aber um dieses Ziel zu erreichen, können Sie die folgenden Befehle verwenden:
Kopieren Sie Dateien / Ordner zwischen einem Container und dem lokalen Dateisystem: -
Referenz siehe:
https://docs.docker.com/engine/reference/commandline/cp/
quelle
Ich habe den
/home/<user-name>
Ordner meines Hosts erfolgreich in den/mnt
Ordner des vorhandenen (nicht laufenden) Containers gemountet . Sie können dies folgendermaßen tun:Öffnen Sie die Konfigurationsdatei, die dem gestoppten Container entspricht und unter zu finden ist
/var/lib/docker/containers/99d...1fb/config.v2.json
(möglicherweiseconfig.json
für ältere Docker-Versionen).Suchabschnitt
MountPoints
, der in meinem Fall leer war :"MountPoints":{}
. Als nächstes ersetzen Sie den Inhalt durch so etwas (Sie können den richtigen Inhalt aus einem anderen Container mit den richtigen Einstellungen kopieren):oder das gleiche (formatiert):
service docker restart
Dies funktioniert bei mir mit Ubuntu 18.04.1 und Docker 18.09.0
quelle
systemctl stop docker.service
2. Bearbeitenconfig.v2.json
:vim <(jq . /var/lib/docker/containers/<container-ID>/config.v2.json)
3. Speichern Sie Aktualisierungen in einer Datei::w config.v2.json
4. Beenden Sie vim::q!
5. Aktualisieren Sie die vorhandene Datei:jq -c . config.v2.json > /var/lib/docker/containers/<container-ID>/config.v2.json
6. Starten Sie die Docker-Engine:systemctl start docker.service
7. Starten Sie gegebenenfalls den Container :docker start <container-name/ID>
8. Viel Spaß :-)service docker restart
. Ich habe versucht,docker restart <container>
dann wird die neue Konfiguration nicht übernommen und wird von der alten Konfiguration überschrieben.jq
wird dazu beitragen , ziemlich die JSON drucken , so dass es der mroe menschlichen editierbare:cat config.v2.json | jq . > config.json
Jérôme Petazzoni hat einen ziemlich interessanten Blog-Beitrag darüber, wie man ein Volume an einen Container anhängt, während dieser ausgeführt wird . Dies ist nicht sofort in Docker integriert, aber möglich.
Wie er auch betont
YMMV
quelle
Leider ist die Schalteroption zum Mounten eines Volumes nur im
run
Befehl enthalten.docker run --help
-v, --volume list Bind mount a volume (default [])
Es gibt jedoch eine Möglichkeit, dies zu umgehen, sodass Sie die Anwendungen, die Sie bereits auf Ihrem Container eingerichtet haben, nicht neu installieren müssen.
docker container export -o ./myimage.docker mycontainer
docker import ./myimage.docker myimage
docker run -i -t -v /somedir --name mycontainer myimage /bin/bash
quelle
docker container
Ihrer Information - ist in 1.11.2 kein gültiger Befehl (dies ist die neueste Version, die derzeit von Synology unterstützt wird). Ich kann jedoch keine Dokumente finden, die angeben, wann es hinzugefügt wurde. In diesem Fall ist der erste Befehldocker export -o ./myimage.docker mycontainer
.Ein Hinweis zur Verwendung von Docker Windows-Containern, nachdem ich lange nach diesem Problem gesucht hatte!
Bedingungen:
Problem:
Lösung wie hier teilweise beschrieben:
docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer
docker exec -it <CONTAINERID> cmd.exe
mkdir DirForMount
docker container stop <CONTAINERID>
docker commit <CONTAINERID> <NEWIMAGENAME>
docker container rm <CONTAINERID>
docker run -d -p 1433:1433 -e sa_password=<STRONG_PASSWORD> -e ACCEPT_EULA=Y -v C:\DirToMount:C:\DirForMount <NEWIMAGENAME>
Danach habe ich dieses Problem auf Docker Windows Containern gelöst.
quelle
Der beste Weg ist, alle Dateien und Ordner in einem Verzeichnis in Ihrem lokalen Dateisystem zu kopieren, indem Sie:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
SRC_PATH
ist auf ContainerDEST_PATH
ist auf localhostDann machen Sie
docker-compose down
ein Volumen zum gleichen befestigenDEST_PATH
und Docker - Containern laufen durch den Einsatzdocker-compose up -d
Fügen Sie Volumen hinzu, indem Sie folgen
docker-compose.yml
quelle