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?.
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
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:
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.COPY abc.txt /app #This won't work
.dockerignore
- oder .gitignore
-Dateien ignoriert wird (Vorsicht bei Platzhaltern)Manchmal funktioniert WORKDIR /abc
, gefolgt von COPY . xyz/
, wo COPY /abc xyz/
fehlschlägt, aber es ist etwas hässlich.
sie können entweder den ADD-Befehl https://docs.docker.com/engine/reference/builder/#/add oder den COPY-Befehl https://docs.docker.com/engine/reference/ verwenden. Builder/#/copy
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