Wie kann ich eine lokale Datei für einen Container verwenden?

74

Ich versuche einen Container zu erstellen, um ein Programm auszuführen. Ich verwende ein vorkonfiguriertes Image und muss jetzt das Programm ausführen. Es ist jedoch ein maschinelles Lernprogramm und ich benötige einen Datensatz von meinem Computer, um ausgeführt zu werden.

Die Datei ist zu groß, um in den Container kopiert zu werden. Es ist am besten, wenn das im Container ausgeführte Programm den Datensatz in einem lokalen Verzeichnis meines Computers durchsucht, aber ich weiß nicht, wie ich das tun kann.

Gibt es eine Möglichkeit, diese Referenz mit einem Docker-Befehl zu erstellen? Oder mit Dockerfile?

Gomesh
quelle

Antworten:

107

Ja, das kannst du machen. Was Sie beschreiben, ist ein Bind-Mount. Dokumentation zu diesem Thema finden Sie unter https://docs.docker.com/storage/bind-mounts/ .

Wenn ich beispielsweise einen Ordner aus meinem Ausgangsverzeichnis /mnt/mydatain einen Container einbinden möchte, kann ich Folgendes tun:

docker run -v /Users/andy/mydata:/mnt/mydata myimage

Jetzt hat /mnt/mydatader Container Zugriff /Users/andy/mydataauf meinen Host.

Beachten Sie, dass bei Verwendung von Docker für Mac oder Docker für Windows bestimmte Verzeichnisse auf dem Host standardmäßig zulässig sind:

Wenn Sie Docker Machine unter Mac oder Windows verwenden, hat Ihr Docker Engine-Daemon nur eingeschränkten Zugriff auf Ihr MacOS- oder Windows-Dateisystem. Docker Machine versucht, Ihr Verzeichnis / Users (macOS) oder C: \ Users (Windows) automatisch freizugeben. So können Sie Dateien oder Verzeichnisse unter macOS mit mounten.

Update Juli 2019:

Ich habe den Dokumentationslink und die Benennung aktualisiert, um korrekt zu sein. Diese Art von Halterungen wird als "Bindungshalterungen" bezeichnet. Das Snippet zu Docker für Mac oder Windows wird nicht mehr in der Dokumentation angezeigt, sollte aber weiterhin gelten. Ich bin nicht sicher, warum sie es entfernt haben (mein Docker für Mac enthält immer noch eine explizite Liste der zulässigen Bereitstellungspfade auf dem Host).

Andy Shinn
quelle
Danke Andy. Aber wenn ich diesen Befehl ausführe, wird auf die Dateien im Ordner / mnt / mydata normal zugegriffen? Kann ich Dinge wie cd / mnt / mydata / test tun? Ich habe getan, was Sie gesagt haben, aber wenn ich einen ls-Befehl im Verzeichnis mydata im Container verwende, gibt es keine Datei.
Gomesh
Ich denke, in diesem Fall sollten Sie mit Ihrem docker runBefehl und den erwarteten Ergebnissen eine neue Frage stellen, da diese jetzt nicht mehr in den Geltungsbereich dieser Frage fällt. So sollte es tatsächlich funktionieren. Es hört sich so an, als ob der Host-Ordner falsch ist oder Sie etwas von außerhalb von mounten /Users. Stellen Sie sicher, dass Sie Docker-Versionen und den von Ihnen verwendeten Docker (Docker für Windows usw.) angeben.
Andy Shinn
3
Ich denke, Sie werden eine Fehlermeldung erhalten, wenn Sie den docker myimage run -v /Users/andy/mydata:/mnt/mydata
Bildnamen nicht
@MonicaHeddneck von docker run --help: Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Théo Rubenach
@AndyShinn Ich denke, Sie waren die Person, nach der ich gesucht habe. Bitte überprüfen Sie diese Frage: security.stackexchange.com/questions/237987/… Wie Sie sagten, handelt es sich um eine Art Berechtigungssache. Wie können wir dies überwinden? Bitte beantworten Sie diese Frage.
Januar Agrawal