wake-up-neo.net

So kopieren Sie eine Datei mit Dockerfile von Host in Container

Ich habe eine Dockerfile geschrieben, die so aussieht

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget

Jetzt habe ich eine Datei namens abc.txt auf meinem Host-Rechner. Wie kann ich es in diesen Container kopieren? Gibt es einen Schritt, den ich in Dockerfile hinzufügen kann, welche Kopie vom Host in den Container kopiert wird?.

38
Sasikiran Vaddi

Verwenden Sie den COPY-Befehl wie folgt:

COPY foo.txt /data/foo.txt
# where foo.txt is the relative path on Host
# and /data/foo.txt is the absolute path in the image

weitere Details zu COPY finden Sie in der offiziellen Dokumentation

Eine Alternative wäre die Verwendung von ADD. Dies ist jedoch nicht die bewährte Methode, wenn Sie nicht einige der erweiterten ADD-Funktionen wie die Dekomprimierung von tar.gz-Dateien verwenden möchten. Wenn Sie weiterhin den Befehl ADD verwenden möchten, gehen Sie folgendermaßen vor:

ADD abc.txt /data/abc.txt
# where abc.txt is the relative path on Host
# and /data/abc.txt is the absolute path in the image

weitere Details zu ADD finden Sie in der offiziellen Dokumentation

58
george.yord

Für diejenigen, die diesen (fürchterlich unklaren) Fehler erhalten:

COPY fehlgeschlagen: stat /var/lib/docker/tmp/docker-builderXXXXXXX/abc.txt: keine solche Datei oder Verzeichnis

Es kann viele Gründe geben, darunter:

  • Denken Sie für Benutzer von Docker-Compose daran, dass die Docker-Compose.yml context den Kontext der Docker-Datei überschreibt. Ihre COPY-Anweisungen müssen jetzt in einem Pfad relativ zu dem, was in docker-compose.yml definiert ist, navigieren, anstatt relativ zu Ihrer Docker-Datei.
  • Nachgestellte Kommentare oder ein Semikolon in der Zeile COPY: COPY abc.txt /app #This won't work
  • Die Datei befindet sich in einem Verzeichnis, das von .dockerignore- oder .gitignore-Dateien ignoriert wird (Vorsicht bei Platzhaltern)
  • Sie haben einen Tippfehler gemacht

Manchmal funktioniert WORKDIR /abc, gefolgt von COPY . xyz/, wo COPY /abc xyz/ fehlschlägt, aber es ist etwas hässlich.

3
Overleaf
2
user2915097

Ich war mit diesem Problem konfrontiert, ich konnte das Zeppelin [1GB] -Verzeichnis nicht in den Docker-Container kopieren und bekam ein Problem 

COPY fehlgeschlagen: stat /var/lib/docker/tmp/docker-builder977188321/zeppelin-0.7.2-bin-all: nein solche Datei oder Verzeichnis

Ich verwende Docker-Version: 17.09.0-ce und löste das Problem mit den folgenden Schritten.

Schritt 1: Kopieren Sie das Zeppelin-Verzeichnis [das ich in das Docker-Paket kopieren möchte] in das Verzeichnis "Dockfile". 

Schritt 2: Bearbeiten Sie das Dockfile und fügen Sie den Befehl hinzu [Ort, an den wir kopieren möchten.] ADD ./zeppelin-0.7.2-bin-all/usr/local / 

Schritt 3: Wechseln Sie in das Verzeichnis, in dem sich DockFile befindet, und führen Sie den Befehl [Alternativen verfügbar] aus

Schritt 4: Andockbild erstellt Erfolgreich mit Protokollen

Schritt 5/9: ADD ./zeppelin-0.7.2-bin-all /usr/local/ ---> 3691c902d9fe

Schritt 6/9: WORKDIR $ ZEPPELIN_HOME ---> 3adacfb024d8 .... Erfolgreich gebautes b67b9ea09f02

1
Rajeev Rathor