2016-04-05 6 views
1

ich meine Mongo ContainerWie ein Mongo Docker-Container auf dem Mac wiederherzustellen

docker rm myMongoDB 

entfernt Habe ich verlieren alle meine Daten, oder kann ich es wiederherstellen? Wenn das so ist, wie?

Wenn ich versuche, einen anderen Container aus dem Bild

docker run -p 27017:27017 -d mongo --name myMongo2 

es wird nicht ausgeführt, und seine STATUS sagt Exited (2) 8 seconds ago zu laufen.

+1

Wenn Ihr Container "Volume" verwendet, sind die Daten wahrscheinlich noch auf Ihrem Computer verfügbar. Siehe http://stackoverflow.com/questions/26009619/how-to-retrieve-volume-from-a-removed-docker-container. Sichern Sie den Ordner, bevor Sie etwas tun, falls etwas schief geht. –

+0

@warmoverflow Ich hatte diesen Stack-Overflow-Eintrag gesehen, aber ich habe kein '/ var/lib/docker'-Verzeichnis. Nicht sicher, ob es ist, weil ich auf El Capitan aktualisiert habe, seit ich mein mongodb letztes Mal benutzt habe, oder weil es ein Mac ist, nicht Linux. – Ferenc

+1

@thaJeztah lieferte eine gute Antwort.Wenn Sie darüber hinaus Mac OS X verwenden, verwenden Sie die Docker Toolbox. Der '/ var/lib/docker' Ordner befindet sich in der Docker Toolbox vm, die Sie mit 'docker-machine ssh default' anmelden können. –

Antwort

5

Das offizielle mongo Bild auf Docker Hub (https://hub.docker.com/_/mongo/) definiert zwei Volumes zum Speichern von Daten in the Dockerfile. Wenn Sie beim Ausführen des Containers nicht explizit eine Option -v/--volume angegeben haben, hat Docker anonyme (unbenannte) Volumes für diese erstellt, und diese Volumes sind möglicherweise noch vorhanden. Es kann etwas schwierig sein zu finden, welche Volumes zuletzt vom Container verwendet wurden, da sie keinen Namen haben.

Um alle noch auf dem Docker-Host vorhandenen Volumes aufzulisten, verwenden Sie;

docker volume ls 

Was sollte Ihnen so etwas geben;

DRIVER    VOLUME NAME 
local    9142c58ad5ac6d6e40ccd84096605f5393bf44ab7b5fe51edfa23cd1f8e13e4b 
local    4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1 
local    da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13 
local    81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139 

Um zu sehen, was sich in einem Volume befindet, können Sie es an einen temporären Container anhängen und überprüfen, was sich dort befindet. Beispielsweise;

docker run -it -v 81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139:/volume-data ubuntu 

, die eine interaktive Shell in einem neuen ubuntu Container beginnt, mit dem Volumen 81a40483ae00d72dcfa2117b3ae40f3fe79038544253e60b85a8d0efc8f3d139 bei /volume-data/ im Innern des Behälters montiert.

Sie können dann gehen Sie in dieses Verzeichnis, und prüfen Sie, ob es das Volumen Sie suchen:

[email protected]:/# cd /volume-data/ 
[email protected]:/volume-data# ls -la 

sobald Sie welche Datenträger identifiziert (nach dem Dockerfile, das Mongo Bild zwei verwendet), Sie kann einen neuen Mongo-Container starten und diese Volumes mounten;

docker run -d --name mymongo \ 
    -v 4ac8e34c11ac7955b9b79af10c113b870edd0869889d1005ee17e98e7c6c05f1:/data/db/ \ 
    -v da0b4a7a00c4b60c492599dabe1dbc501113ae4b2dd1811527384a5dc26cab13:/data/configdb/ \ 
    mongo 

Ich schlage vor, Sie wirklich den Where to Store Data Abschnitt in der Dokumentation für das Mongo Bild auf Docker Hub lesen Sie Ihre Daten zu verhindern verlieren.

HINWEIS

ich auch festgestellt, dass Ihr letzter Befehl --name myMongo2nach der Bildnamen setzt; Es sollte vormongo (der Bildname) sein. Auch myMongo2 ist ein ungültiger Containername, da Großbuchstaben nicht zulässig sind.

+0

Anscheinend enthält der Abschnitt "Speicherort für Daten" eine WARNUNG für OS X und besagt, dass es nicht möglich ist, einen MongoDB-Container mit dem Datenverzeichnis auszuführen, das dem Host zugeordnet ist. Gut zu wissen! Wie auch immer, meine Daten sollten jetzt im Verzeichnis "/ data/..." (-ies) liegen. Ich habe jedoch kein '/ data /' Verzeichnis. Es könnte sein, dass wenn ich OS X kürzlich zu El Capitan verbesserte, wurde es ausgelöscht ?? – Ferenc

+0

Ich habe auch keinen "docker volume ls" -Befehl auf meinem Docker. 'docker: 'volume' ist kein docker-Befehl. Ich bin auf Docker 1.8.1, falls 'volume' ist neuer Befehl. – Ferenc

+1

Sieht aus, als ob Sie eine ältere Version von Docker ausführen. Die neuesten Versionen von docker toolbox finden Sie unter https://github.com/docker/toolbox/releases. Sie könnten daran interessiert sein, https://blog.docker.com/2016/03/docker-for-mac-windows-beta/, die viele Probleme bei der Zuordnung von Host-Verzeichnissen – thaJeztah