2016-07-26 15 views
1

Ist es möglich, ein Volume von einem Dockerfile zu mounten? Wenn nicht, was ist der beste Weg dies zu erreichen?Kann ich ein Volume von einer Dockerfile bereitstellen?

Ich weiß, dass Sie dies mit einem normalen Docker Befehle in der Eingabeaufforderung tun können, aber gibt es eine bessere Möglichkeit, dies zu tun?

+0

Sie können ein Volume von einer Dockerfile aus mounten, Sie können den Speicherort einfach nicht angeben - so dass es je nach Bedarf hilfreich sein kann. Der Grund ist, dass der Build unabhängig vom Host sein sollte. Wie bereits erwähnt, können Sie Dateien während des Builds kopieren, aber wenn Sie lesen/schreiben möchten, benötigen Sie möglicherweise eine andere Lösung. Sie könnten die API verwenden, um den Speicherort des dynamisch erstellten Volumes abzurufen, aber ich bin mir nicht sicher, ob ein Anwendungsfall besser wäre, als ihn in 'run' zu spezifizieren. Wenn Sie einen einzigartigen Anwendungsfall haben, würde mehr Detail helfen. – ldg

+0

Es scheint, dass [Rocker] (https://github.com/grammmarly/rocker) in diesem Fall hilfreich sein könnte. – Opal

Antwort

1

Leider ist es nicht möglich, dies während eines Image Build zu tun.

Ich denke, der Grund könnte Portabilität sein? Ich bin mir da nicht ganz sicher - wird nett sein, wenn das jemand weiter erklären kann.

Aber ich denke, wenn Docker Benutzern erlauben würde, Volumes auf Build zu mounten, dann muss Docker verschiedene Arten von Dateisystemen antizipieren und handhaben, zum Beispiel Windows vs Unix. Was passiert auch, wenn der Verzeichnispfad, der zum Mounten verwendet werden soll, nicht auf einem anderen Host existiert?

Wie dem auch sei, ich bin nicht ganz sicher, was Ihr Anwendungsfall ist, aber Sie sollten die ADD oder COPY Befehle verwenden, um Dateien von Ihrem Host-Dateisystem in das Bild während der Build zu bewegen und die verschobenen Dateien für andere Zwecke verwenden usw. wie die Installation

See:
https://docs.docker.com/engine/reference/builder/#/add

F: Also, was ist der beste Ansatz?
A: Ich denke, es gibt keinen Standard Ansatz für Montage Volumen. Normalerweise definiere ich meine Montage in der Datei docker-compose.

See:
https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

+0

danke dafür, plus ich habe noch eine Frage, wie mounte ich den aktuellen Ordner als ein Volume zum Beispiel möchte ich so etwas tun docker run -i -t -v :/usr/TmpVolume ubuntu/bin/bash – user3547774

+0

@ user3547774 Ich könnte versuchen, mit dem '\' pwd \ '' - Befehl einen Ausdruck auszuführen, um das aktuelle Arbeitsverzeichnis zu erhalten.Beispiel: 'docker run -i -t -v \' pwd \ ':/usr/TmpVolume ubuntu/bin/bash' Froh, zu helfen, lassen Sie mich wissen, ob dies für Sie funktioniert –

+0

Ich habe das versucht, hat nicht funktioniert. Was macht 'pwd' überhaupt? Es wurde ein Volume innerhalb des Containers erstellt, aber die auf dem Host-System verfügbaren Inhalte fehlten. – user3547774

1

Im Rahmen eines Dockerfile haben Sie Zugriff begrenzten Ressourcen zu hosten, soweit von dem, was benötigt wird, um tatsächlich das Bild des Behälters zu bauen. Um zu veranschaulichen, ob Sie in der Lage sein sollten, Host-Volumes zu mounten, Container zu starten oder auf ihre Ressourcen zuzugreifen, würde dies wahrscheinlich nur mit einem Bild zusammenhängen, das nur für Ihre aktuelle Umgebung erstellt werden kann.

Wenn Sie wirklich Host-Ressourcen benötigen, die nur für die Dauer des Builds als Volume bereitgestellt werden, können Sie sich die Datei Packr ansehen. Wenn das Volume jedoch verfügbar sein soll, wenn der Container gestartet wird, ist es normalerweise in Ordnung, docker run --name=Foo $ARGS zu verwenden.

Verwandte Themen