No se puede crear una imagen de Docker para COPY fallida: error de stat / var / lib / docker / tmp / docker-builder


87

Quiero crear una imagen de Docker. Este es mi directorio de trabajo: Dockerfile.in test.json test.py

Y este es mi Dockerfile:

COPY ./test.json /home/test.json
COPY ./test.py /home/test.py

RUN python test.py

Cuando lanzo este comando: docker build -f Dockerfile.in -t 637268723/test:1.0 .

Me da este error:

`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`

¿Alguien puede ayudarme?


12
¿Está test.py o * .py en su dockerignore?
Jay Dorsey

3
¿Está disponible test.py en el directorio actual donde Docker archivó las salidas?
Jinna Balu

5
¿Alguna vez resolviste esto? Tener el mismo problema.
emmdee

2
Docker todavía presenta comportamientos con errores en su motor, en mi humilde opinión. COPYUsé la misma declaración en mi Dockerfile y tuve los mismos problemas. Probé COPY /host_file /container_folder(sin punto) y funcionó. Después de esto, probé el primero COPYque tienes aquí, ¡y funcionó normalmente (wtf?)! Una cosa que hice diferente fue eliminar todas las imágenes (caché) que Docker genera en el proceso de compilación. Supongo que es posible que la basura todavía esté almacenada en estas imágenes intermedias (estoy usando Docker 18.09.5). Eche un vistazo a SO o GitHub, MUCHOS problemas sobre 'copiar host -> contenedor. Mal presagio.
ivanleoncz

1
Wow man, ivanleoncz gracias resolví este problema. Tenía esta cláusula: ADD mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar y puse una barra simple antes de mcint_swagger_hub-1.0.0.jar, así que ahora tengo esto: AGREGAR /mcint_swagger_hub-1.0.0.jar /opt/jboss/wildfly/standalone/deployments/mcint_swagger_hub_api-1.0.0.jar y no tengo ningún problema. ¡¡Gracias hermano!! Dios te bendiga
Richard Rebeco

Respuestas:


51

Debe colocar esos archivos en el mismo directorio que Dockerfile.


Como estaba usando 'from python: 2.7-onbuild', copió todos los archivos hermanos y secundarios de la ubicación de Dockerfile de todos modos. Entonces, finalmente eliminé las líneas COPY de Dockerfile y los archivos que eran archivos hermanos también se copiaron.
Kuba

2
Si esto no funciona, ¡revise su .dockerignorearchivo!
Kenny Evitt

Esto funcionó para mí.
cnu

42

Compruebe si hay un .dockerignorearchivo, si es así, agregue:

!mydir/test.json
!mydir/test.py

2
Este funcionó para mí, se ignoró toda la carpeta, luego la ventana acoplable no pudo crear la imagen y me dio una mala impresión que me volvió loco por las rutas de los archivos.
Marco Medrano

Esto funcionó para mí también. En mi caso, la carpeta a la que me refería estaba en .dockerignore, así que eliminada de ella.
Durga P. Kapa

11
  1. P1: Verifique su .dockerignorearchivo en la ruta de compilación, ¡los archivos o directorio que desea copiar pueden estar en la lista de archivos ignorados!
  2. P2: La directiva COPY se basa en el contexto en el que está creando la imagen, así que tenga en cuenta cualquier problema con el directorio donde actualmente está creando la imagen. Ver: https://docs.docker.com/engine/reference/builder/#copy

.dockerignore es la causa principal de mi problema.
Ming Zhu

6

La eliminación ./de la ruta de origen debería resolver su problema:

 COPY test.json /home/test.json
 COPY test.py /home/test.py

4
en caso de que los puse en la ventana acoplable ignorar oh no: D
Adiii

@Mugen me alegro de que mi comentario salve tu vida;)
Adiii

1
@Adiii también me salvaste la vida.
MonkeySeeMonkeyDo

4

También me enfrentaba a lo mismo, moví mi archivo de la ventana acoplable a la raíz del proyecto. entonces funcionó


4

Tuve que usar el siguiente comando para iniciar la compilación:

docker build .


2

En su caso, eliminar ./ ​​debería resolver el problema. Tuve otro caso en el que estaba usando un directorio del directorio principal y la ventana acoplable solo puede acceder a los archivos presentes debajo del directorio donde está presente Dockerfile, por lo que si tengo una estructura de directorio / root / dir y Dockerfile / root / dir / Dockerfile

No puedo copiar haz lo siguiente

COPY root/src /opt/src

1
Mi propio problema era un poco diferente, pero el "problema" de Docker con rutas extrañas al hacer referencia a un archivo sobre la carpeta que contiene Dockerfile fue el problema ¡ GRACIAS ! [Windows 10 + Powershell].
RichW

1

Esto puede ayudar a otra persona que se enfrente a un problema similar.

En lugar de poner el archivo flotando en el mismo directorio que Dockerfile, cree un directorio y coloque el archivo para copiar y luego intente.

COPY mydir/test.json /home/test.json
COPY mydir/test.json /home/test.json

¿Es esto un error? ¿Alguien ha descubierto por qué funciona esto? Esto fue lo único que ayudó
Elijas Dapšauskas

1

Otra posible causa es que la ventana acoplable no seguirá los enlaces simbólicos de forma predeterminada (es decir, no los utilizará ln -s).


1

En mi caso, fue la línea de comentarios la que estropeó el comando COPY

Eliminé el comentario después del comando COPY y lo coloqué en una línea dedicada encima del comando. Sorprendentemente, resolvió el problema.

Comando de Dockerfile defectuoso

COPY qt-downloader .     # https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions

Comando Dockerfile de trabajo

# https://github.com/engnr/qt-downloader -> contains the script to auto download qt for different architectures and versions
COPY qt-downloader .     

Espero que ayude a alguien.


1

Asegúrese de que el contexto con el que construye su imagen esté configurado correctamente. Puede establecer el contexto al construir como argumento. Ejemplo: docker build -f ./Dockerfile ..donde '..' es el contexto en este ejemplo.


0

Al usar Docker componer archivos, publicar, publicar en obj / Docker / Publish. Cuando copié mis archivos allí y apunté mi Dockerfile a este directorio (como se generó), funciona ...


0

La forma en que Docker busca el archivo es desde el directorio actual, es decir, si su comando es

COPY target / xyz.jar app.jar

AÑADIR target / xyz.jar app.jar

El jar xyz debe estar en el directorio current / target; aquí, current es el lugar donde tiene su archivo de docker. Entonces, si tiene Docker en un directorio diferente. es mejor llevarlo al directorio principal del proyecto y tener una ruta directa al archivo jar que se agrega o copia en la imagen.


0

Tuve el mismo problema con un archivo .tgz.

Se trataba solo de la ubicación del archivo. Asegúrese de que el archivo esté en el mismo directorio del Dockerfile.

También asegúrese de que el directorio de archivos .dockerignore no excluya el patrón de expresiones regulares del archivo.


0

En mi caso, tuve que poner todos los archivos de mi proyecto en un subdirectorio

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

Luego copié archivos a su manera

COPY app ./

-1

Esta es la razón por la que sucede, es decir, su directorio local en el sistema operativo host donde está ejecutando la ventana acoplable debería tener el archivo; de lo contrario, obtendrá este error

Una solución es: usar en RUN cp <src> <dst>lugar de COPY <src> <dst>

luego ejecute el comando que funciona!


1
¡Hola, Nishant! Sería digno de expresar su solución con más detalles. Copiar archivos del host al contenedor, sigue siendo algo complicado en Docker. Por favor, dé ejemplos para aclarar su respuesta. Saludos :)
ivanleoncz

-1

La siguiente estructura en docker-compose.yaml le permitirá tener el Dockerfile en una subcarpeta desde la raíz:

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: ...
...

Luego, en su Dockerfile, que está en el mismo directorio que docker-compose.yaml, puede hacer lo siguiente:

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}

Luego puede ejecutar docker-compose desde el directorio principal como:

docker-compose -f .\dockerfiles\docker-compose.yaml build --no-cache

-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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.