2017-07-04 3 views
-1

Zunächst fehlt mir wirklich viel Wissen über Docker selbst und seine Struktur. Ich weiß, dass es viel nützlicher wäre, zuerst die Grundlagen zu lernen, aber ich brauche dies, um zu anderen Dingen vorerst zu gehen.Move-Datei heruntergeladen in Dockerfile auf Festplatte

Also innerhalb einer Dockerfile ich installiert wget & verwendet es, um eine Datei von einer Website herunterladen, Authentifizierung & Download sind erfolgreich. Wenn ich später versuche, diese Datei zu verschieben, kann sie nicht gefunden werden und wird auch nicht mit Explorer angezeigt (Pfad wurde angegeben) Ich dachte, es könnte etwas mit RUN & zu tun haben, wie es den Befehl wget ausführt ; Ich habe gelesen, dass die ID verwendet werden kann, um es auf die Festplatte zu kopieren, aber wie habe ich das in einer Dockerfile gemacht?

RUN wget -P ./path/to/somewhere http://something.com/file.txt --username xyz --password bluh 

ADD ./path/to/somewhere/file.txt /mainDirectory 

Download wird & Log-in ist erfolgreich gezeigt, aber wie ich bereits erwähnt Ich habe Probleme später auf diese Datei verwenden, da es nicht ist auf der Festplatte befinden. Wahrscheinlich ein grundlegender Fehler, aber ich würde wirklich einige Eingaben schätzen, die zu einer Lösung führen könnten.

Offensichtlich wird der Fehler erzeugt, wenn versucht wird, ADD auszuführen, da keine Datei zu verschieben ist. Ich versuche einen Weg zu finden, ein Volume zu mounten, um es zu speichern, aber bisher vergeblich.

Edit: Obwohl die Frage ähnelt der "auf Festplatte verschieben", ich suche nach Möglichkeiten, die ID des Containers in der Dockerfile erstellt, um es zu bewegen; Während der Thread solche Antworten liefert, hatte ich kein Glück, sie in der Dockerfile selbst zu verwenden.

+0

Mögliches Duplikat von [Docker - Datei vom Container zum Host kopieren] (https://stackoverflow.com/questions/22049212/docker-copy-file-from-container-to-host) – dimo414

+0

Ich erkannte, deshalb bin ich Ich frage, wie man sie bewegen würde; Ich weiß, dass es möglich ist, cp zu verwenden, aber ich konnte die ID des verwendeten Containers noch nicht finden. – AscendedKitten

+0

Versuchen Sie, die Datei im Docker-Container oder auf Ihrem Host zu verwenden? – jdno

Antwort

2

Kurze Antwort ist, dass es nicht möglich ist.

Die Dockerfile baut ein Bild, das Sie können run als kurzlebig Behälter. Während des Builds haben Sie keinen Schreibzugriff auf den Host und sein Dateisystem. Was irgendwie Sinn macht, da Sie ein unveränderliches Bild erstellen möchten, von dem aus Sie ephemere Container ausführen können.

Was Sie tun können, ist run ein Container, und mounten Sie einen Pfad von Ihrem Host als volume in den Container. Nur so können Sie Dateien zwischen dem Host und einem Container freigeben.

Hier ist ein Beispiel, wie Sie dies mit dem sherylynn/wget Bild machen konnten:

docker run -v /path/on/host:/path/in/container sherylynn/wget wget -O /path/in/container/file http://my.url.com 

Die -v HOST:CONTAINER Parameter können Sie einen Pfad auf dem Host an, im Innern des Behälters an einer bestimmten Stelle angebracht ist.

Für wget würde ich -O über -P beim Herunterladen einer einzelnen Datei bevorzugen, da es wirklich explizit macht, wo Ihr Download endet. Wenn Sie auf den Speicherort des Volumes -O zeigen, landet die heruntergeladene Datei auf dem Host-System (in dem Ordner, den Sie bereitgestellt haben).

Da ich keine Ahnung habe, wie Ihr Bild oder Ihre Umgebung aussieht, müssen Sie möglicherweise ein oder zwei Dinge optimieren, um mit Ihrem eigenen Bild zu arbeiten. Als allgemeine Empfehlung: Für grundlegende Befehle wie wget oder curl können Sie vorgefertigte Bilder auf Docker Hub finden. Dies kann sehr nützlich sein, wenn Sie eine Kontinuierliche Integration Pipeline oder so einrichten, wo Sie wget oder curl verwenden möchten, aber nicht direkt ausführen können.

+0

Vielen Dank! Leider kann ich die Umgebung nicht ändern, da es eine Aufgabe ist, die ich erhielt, aber das Ausprobieren des Befehls führte zu einem "Illegal Option" -Fehler, gefolgt von einem Code ungleich Null 2. Ich nehme an, dass ich die Parameter wie --auth verwenden kann -keine Herausforderung für die Authentifizierung? – AscendedKitten

+1

Ja, es ist dein einfaches altes "wget", das in Docker gebündelt/verteilt wird. Sie können 'docker run sherylynn/wget wget --help' verwenden, um eine Liste aller verfügbaren Optionen zu sehen (die genau mit Ihren lokalen Optionen übereinstimmen sollten). – jdno

+0

Gilt das gleiche für eine Dockerfile? Ich denke, ich müsste stattdessen "VOLUME" verwenden, aber erlaubt es die gleiche Funktionalität? – AscendedKitten

0

Verwendung wget -O statt -P für bestimmte Datei herunterladen

für zB

RUN wget -O /tmp/new_file.txt http://something.com --username xyz --password bluh/new_file.txt

Danke

+0

Danke für die Antwort, obwohl es scheint, dass es die Tatsache nicht ändert, dass die Datei verschwunden ist, nachdem die VM "geschlossen" hat. – AscendedKitten