Ich möchte ein Docker-Image erstellen. Dies ist mein Arbeitsverzeichnis: Dockerfile.in test.json test.py
Und das ist meine Docker-Datei:
COPY ./test.json /home/test.json
COPY ./test.py /home/test.py
RUN python test.py
Wenn ich diesen Befehl starte:
docker build -f Dockerfile.in -t 637268723/test:1.0 .
Es gibt mir diesen Fehler:
`Step 1/5 : COPY ./test.json /home/test.json
---> Using cache
---> 6774cd225d60
Step 2/5 : COPY ./test.py /home/test.py
COPY failed: stat /var/lib/docker/tmp/docker-builder428014112/test.py:
no such file or directory`
Kann mir jemand helfen?
python
docker
dockerfile
docker-image
EdoBen
quelle
quelle
COPY
Anweisung in meiner Docker-Datei verwendet und hatte dieselben Probleme. VersuchtCOPY /host_file /container_folder
(ohne Punkt), und es hat funktioniert. Versuchen Sie danach das erstereCOPY
, das Sie hier haben, und es funktionierte normal (wtf?)! Eine Sache, die ich anders gemacht habe, war, alle Bilder (Cache) zu entfernen, die Docker während des Erstellungsprozesses generiert. Ich vermute, dass auf diesen Zwischenbildern möglicherweise noch Papierkorb gespeichert ist (ich verwende Docker 18.09.5). Werfen Sie einen Blick auf SO oder GitHub, SO VIELE Probleme beim Kopieren von Host -> Container. Schlechtes Omen.Antworten:
Sie sollten diese Dateien mit Dockerfile in dasselbe Verzeichnis stellen.
quelle
.dockerignore
Datei!Überprüfen Sie, ob eine
.dockerignore
Datei vorhanden ist. Wenn ja, fügen Sie Folgendes hinzu:quelle
.dockerignore
Datei im Erstellungspfad. Die Dateien oder Verzeichnisse, die Sie kopieren möchten, befinden sich möglicherweise in der Liste der ignorierten Dateien.quelle
Das Entfernen
./
aus dem Quellpfad sollte Ihr Problem beheben:quelle
Ich war auch mit dem gleichen Problem konfrontiert. Ich habe meine Docker-Datei in das Stammverzeichnis des Projekts verschoben. dann hat es geklappt
quelle
Ich musste den folgenden Befehl verwenden, um den Build zu starten:
docker build .
quelle
In Ihrem Fall sollte das Problem durch Entfernen von ./ behoben werden. Ich hatte einen anderen Fall, in dem ich ein Verzeichnis aus dem übergeordneten Verzeichnis verwendet habe und Docker nur auf Dateien zugreifen kann, die unterhalb des Verzeichnisses vorhanden sind, in dem Dockerfile vorhanden ist. Wenn ich also eine Verzeichnisstruktur / root / dir und Dockerfile / root / dir / Dockerfile habe
Ich kann Folgendes nicht kopieren
quelle
Dies kann jemand anderem helfen, der mit einem ähnlichen Problem konfrontiert ist.
Anstatt die Datei im selben Verzeichnis wie die Docker-Datei zu speichern, erstellen Sie ein Verzeichnis, platzieren Sie die zu kopierende Datei und versuchen Sie es dann.
quelle
In meinem Fall war es die Kommentarzeile, die den COPY-Befehl durcheinander brachte
Ich habe den Kommentar nach dem Befehl COPY entfernt und ihn in eine dedizierte Zeile über dem Befehl eingefügt. Überraschenderweise löste es das Problem.
Fehlerhafter Dockerfile-Befehl
COPY qt-downloader . # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
Working Dockerfile-Befehl
# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions COPY qt-downloader .
Hoffe es hilft jemandem.
quelle
Stellen Sie sicher, dass der Kontext, mit dem Sie Ihr Image erstellen, richtig eingestellt ist. Sie können den Kontext beim Erstellen als Argument festlegen. Beispiel:
docker build -f ./Dockerfile ..
Dabei ist '..' der Kontext in diesem Beispiel.quelle
Wenn Sie den Docker verwenden, erstellen Sie Dateien, veröffentlichen Sie und veröffentlichen Sie sie in obj / Docker / Publish. Wenn ich meine Dateien dort kopiert und meine Docker-Datei auf dieses Verzeichnis (wie generiert) verwiesen habe, funktioniert es…
quelle
Eine weitere mögliche Ursache ist, dass Docker standardmäßig keinen symbolischen Links folgt (dh nicht verwendet
ln -s
).quelle
Die Art und Weise, wie Docker nach Dateien sucht, stammt aus dem aktuellen Verzeichnis, dh wenn Ihr Befehl lautet
Das xyz-JAR sollte sich im Verzeichnis current / target befinden - hier ist current der Ort, an dem Sie Ihre Docker-Datei haben. Also, wenn Sie Docker in einem anderen Verzeichnis haben. Es ist besser, es in das Hauptprojektverzeichnis zu bringen und einen geraden Pfad zum JAR zu haben, das zum Image hinzugefügt oder kopiert wird.
quelle
Ich hatte das gleiche Problem mit einer .tgz-Datei.
Es ging nur um den Speicherort der Datei. Stellen Sie sicher, dass sich die Datei im selben Verzeichnis wie die Docker-Datei befindet.
Stellen Sie außerdem sicher, dass das Dateiverzeichnis .dockerignore das Regex-Muster der Datei nicht ausschließt.
quelle
In meinem Fall musste ich alle meine Projektdateien in ein Unterverzeichnis stellen
Dann habe ich Dateien auf seine Weise kopiert
quelle
Hier ist der Grund, warum es passiert, dh Ihr lokales Verzeichnis in dem Host-Betriebssystem, auf dem Sie das Docker ausführen, sollte die Datei haben, andernfalls wird dieser Fehler angezeigt
Eine Lösung ist: Verwenden
RUN cp <src> <dst>
stattCOPY <src> <dst>
Führen Sie dann den Befehl aus, der funktioniert!
quelle
Mit der folgenden Struktur in docker-compose.yaml können Sie die Docker-Datei in einem Unterordner aus dem Stammverzeichnis speichern:
version: '3' services: db: image: postgres:11 environment: - PGDATA=/var/lib/postgresql/data/pgdata volumes: - postgres-data:/var/lib/postgresql/data ports: - 127.0.0.1:5432:5432 **web: build: context: ".." dockerfile: dockerfiles/Dockerfile** command: ... ...
Anschließend können Sie in Ihrer Docker-Datei, die sich im selben Verzeichnis wie docker-compose.yaml befindet, Folgendes tun:
ENV APP_HOME /home RUN mkdir -p ${APP_HOME} # Copy the file to the directory in the container COPY test.json ${APP_HOME}/test.json COPY test.py ${APP_HOME}/test.py # Browse to that directory created above WORKDIR ${APP_HOME}
Sie können Docker-Compose dann wie folgt über das übergeordnete Verzeichnis ausführen:
quelle
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <configuration> <images> <image> <name>imagenam</name> <alias>dockerfile</alias> <build> <!-- filter>@</filter--> <dockerFileDir>dockerfile loaction</dockerFileDir> <tags> <tag>latest</tag> <tag>0.0.1</tag> </tags> </build> <run> <ports> <port>8080:8080</port> </ports> </run> </image> </images> </configuration> </plugin>
quelle