Docker-Image für COPY kann nicht erstellt werden fehlgeschlagen: stat / var / lib / docker / tmp / docker-builder-Fehler

80

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?

EdoBen
quelle
8
Ist test.py oder * .py in Ihrem Dockerignore?
Jay Dorsey
3
Ist test.py im aktuellen Verzeichnis verfügbar, in dem Docker Exitsts abgelegt hat?
Jinna Balu
5
Hast du das jemals gelöst? Das gleiche Problem haben.
Emmdee
2
Docker zeigt immer noch fehlerhafte Verhaltensweisen an seinem Motor, imho. Ich habe dieselbe COPYAnweisung in meiner Docker-Datei verwendet und hatte dieselben Probleme. Versucht COPY /host_file /container_folder(ohne Punkt), und es hat funktioniert. Versuchen Sie danach das erstere COPY, 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.
ivanleoncz
1
Wow Mann, ivanleoncz danke ich habe dieses Problem gelöst. Ich hatte diese Klausel: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar und ich habe einen einfachen Schrägstrich vor das mcint_swagger_hub-1.0.0.jar gesetzt, also jetzt i habe folgendes: ADD /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar und ich haben kein Problem. Dank bro!! Gott segne dich
Richard Rebeco

Antworten:

48

Sie sollten diese Dateien mit Dockerfile in dasselbe Verzeichnis stellen.

Ivan Lee
quelle
Da ich 'from python: 2.7-onbuild' verwendet habe, wurden ohnehin alle Geschwister- und untergeordneten Dateien vom Dockerfile-Speicherort kopiert. Also habe ich endlich die COPY-Zeilen aus Dockerfile entfernt und die Dateien, die als Geschwisterdateien vorliegen, wurden ebenfalls kopiert.
Kuba
2
Wenn dies nicht funktioniert, überprüfen Sie Ihre .dockerignoreDatei!
Kenny Evitt
38

Überprüfen Sie, ob eine .dockerignoreDatei vorhanden ist. Wenn ja, fügen Sie Folgendes hinzu:

!mydir/test.json
!mydir/test.py
Brahimi Boubakeur
quelle
2
Dieser funktionierte für mich, der gesamte Ordner wurde ignoriert, und Docker konnte das Bild nicht erstellen, was einen schlechten Eindruck hinterließ, der mich verrückt nach den Dateipfaden machte.
Marco Medrano
Das hat auch bei mir funktioniert. In meinem Fall befand sich der Ordner, auf den ich mich bezog, in .dockerignore und wurde aus diesem entfernt.
Durga P. Kapa
9
  1. Q1: Überprüfen Sie Ihre .dockerignoreDatei im Erstellungspfad. Die Dateien oder Verzeichnisse, die Sie kopieren möchten, befinden sich möglicherweise in der Liste der ignorierten Dateien.
  2. F2: Die COPY-Direktive basiert auf dem Kontext, in dem Sie das Image erstellen. Beachten Sie daher alle Probleme mit dem Verzeichnis, in dem Sie das Image gerade erstellen! Siehe: https://docs.docker.com/engine/reference/builder/#copy
Lupguo
quelle
.dockerignore ist die Hauptursache für mein Problem!
Ming Zhu
6

Das Entfernen ./aus dem Quellpfad sollte Ihr Problem beheben:

 COPY test.json /home/test.json
 COPY test.py /home/test.py
Daniel Rogatchevsky
quelle
4
im Mai Fall ich sie in Docker ignorieren oh nein: D
Adiii
@Mugen froh, dass mein Kommentar dein Leben rettet;)
Adiii
1
@Adiii du hast mir auch das Leben gerettet.
MonkeySeeMonkeyDo
4

Ich war auch mit dem gleichen Problem konfrontiert. Ich habe meine Docker-Datei in das Stammverzeichnis des Projekts verschoben. dann hat es geklappt

Kumar Abhishek
quelle
4

Ich musste den folgenden Befehl verwenden, um den Build zu starten:

docker build .

Tadej
quelle
2

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

COPY root/src /opt/src
Ankit Marothi
quelle
1
Mein eigenes Problem war etwas anders, aber Dockers "Problem" mit ungeraden Pfaden beim Verweisen auf eine Datei über dem Ordner mit Dockerfile war das Problem DANKE ! [Windows 10 + Powershell].
RichW
1

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.

COPY mydir/test.json /home/test.json
COPY mydir/test.json /home/test.json
Keyur Vyas
quelle
Ist das ein Fehler? Hat jemand herausgefunden, warum das funktioniert? Dies war das einzige, was half
Elijas Dapšauskas
1

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.

Mohammed Muneer
quelle
1

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.

Kevin
quelle
0

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…

Rıfat Erdem Sahin
quelle
0

Eine weitere mögliche Ursache ist, dass Docker standardmäßig keinen symbolischen Links folgt (dh nicht verwendet ln -s).

Alex
quelle
0

Die Art und Weise, wie Docker nach Dateien sucht, stammt aus dem aktuellen Verzeichnis, dh wenn Ihr Befehl lautet

COPY target / xyz.jar app.jar

ADD target / xyz.jar app.jar

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.

Pravin
quelle
0

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.

Abdurrahman Adebiyi
quelle
0

In meinem Fall musste ich alle meine Projektdateien in ein Unterverzeichnis stellen

app -|inside app directory we have the following
     | package.js
     | src 
     | assets
Dockerfile

Dann habe ich Dateien auf seine Weise kopiert

COPY app ./
Ntiyiso Rikhotso
quelle
-1

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>statt COPY <src> <dst>

Führen Sie dann den Befehl aus, der funktioniert!

Nishant Mishra
quelle
1
Hallo Nishant! Es wäre wert, Ihre Lösung mit mehr Details auszudrücken. Das Kopieren von Dateien vom Host in den Container ist in Docker immer noch schwierig. Bitte geben Sie Beispiele an, um Ihre Antwort zu verdeutlichen. Grüße :)
ivanleoncz
-1

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:

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache
gagneet
quelle
-7
 <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>
Satish Koppisetty
quelle