Tengo un Dockerfile configurado en mi carpeta raíz (~). Las primeras tres líneas de mi archivo se ven así:
COPY file1 /root/folder/
COPY file2 /root/folder/
COPY file3 /root/folder/
pero devuelve el siguiente error para cada línea:
El fichero o directorio no existe
Los archivos están en el mismo directorio que mi Dockerfile y también estoy ejecutando el comando docker build - < Dockerfile
en el mismo directorio en la terminal.
¿Qué estoy haciendo mal aquí exactamente?
Respuestas:
La instrucción COPY en
Dockerfile
copia los archivos ensrc
ladest
carpeta. Parece que están perdidos elfile1
,file2
yfile3
o tratando de construir elDockerfile
de la carpeta equivocada.Consulte el documento de Dockerfile
Además, el comando para construir
Dockerfile
debería ser algo así como.fuente
Verifique el
.dockerignore
archivo también.Sé que este es un caso muy raro, pero ese archivo se menciona allí.
fuente
ripgrep
no busco en archivos de puntos, así que no vi la última referencia molesta al directorio anterior.Posiblemente se deba a que está refiriendo file1 / file2 / file3 como una ruta absoluta que no está en el contexto de compilación, Docker solo busca la ruta en el contexto de compilación.
Por ejemplo, si usa COPY / home / yourname / file1, Docker build lo interpreta como $ {docker build working directory} / home / yourname / file1, si no hay ningún archivo con el mismo nombre aquí, no se produce ningún error de archivo o directorio.
Consulte uno de los problemas de la ventana acoplable
fuente
ADD
directiva, gracias.Parece que los comandos:
y:
no se ejecutan de la misma manera. Si desea crear 2 imágenes de la ventana acoplable desde una carpeta con Dockerfile y Dockerfile2, el comando COPY no se puede usar en el segundo ejemplo usando stdin (<Dockerfile2). En su lugar, debes usar:
Entonces COPY funciona como se esperaba.
fuente
La ejecución
docker build . -f docker/development/Dockerfile
funcionó, lo que le permite ejecutar su archivo de Docker desde un directorio específico que no sea la raíz de su aplicación.Utilice
-f
o--file
para especificar el nombre y la ubicación delDockerfile
.Esto me sucedió al intentar ejecutar el archivo de la ventana acoplable desde un directorio diferente.
Tenía el
COPY failed: stat /var/lib/docker/tmp/docker-builder929708051/XXXX: no such file or directory
y logré resolver esto especificando el archivo de la ventana acoplable.Fue lo
docker build docker/development/Dockerfile
que me causó este problema.Lo encontré extraño al principio porque cuando lo tenía
Dockerfile
en el directorio raíz de las aplicaciones, funcionó bien. Esto ayudará si desea administrar los archivos de la ventana acoplable de su entorno un poco mejor.fuente
docker build . -f docker/development/Dockerfile
esto funcionaAcabo de experimentar este problema y ninguna de las sugerencias aquí resolvió mi problema. Resulta que tenía los finales de línea incorrectos en mi archivo y tuve que cambiarlos por los finales de línea apropiados. (En este caso de CRLF a LF, por lo que Ubuntu 14.04 reconocería el script, que había estado editando en Windows).
Cambié los finales de línea usando VSCode, y la mayoría de los editores de código deberían tener la opción de elegir finales de línea.
Espero que esto ayude a alguien.
fuente
Me siento un poco estúpido, pero mi problema era que estaba ejecutando docker-compose y mi Dockerfile estaba en un subdirectorio ./deploy. Mi referencia ADD debía ser relativa a la raíz del proyecto, no al Dockerfile.
Cambiado: AÑADIR ./archivo.tar.gz / etc / carpeta / a: AÑADIR ./deploy/file.tar.gz / etc / carpeta /
De todos modos, pensé en publicar en caso de que alguien tuviera el mismo problema.
fuente
Aquí está la solución y la mejor práctica:
Necesita crear una carpeta de recursos donde pueda guardar todos los archivos que desea copiar.
El comando para copiar archivos debe especificarse de esta manera:
dónde
* recursos : su carpeta local que creó en la misma carpeta donde está Dockerfile
* / root / folder / - carpeta en su contenedor
fuente
Para el siguiente error,
Lo logré reiniciando el servicio Docker.
fuente
Error de archivo no encontrado con Docker put_archive. Estoy usando la API de Python para Docker. Docker versión 1.12.5, compilación 7392c3b
No puedo copiar archivos en un contenedor de ventana acoplable creado.
Si cambio el orden de operación, no hay error y los archivos se copian exactamente donde los quiero. Entonces sé que mi código está funcionando y haciendo lo que quiero que haga. Pero es importante copiar los archivos de configuración a un contenedor antes de que se inicie. Hacer frente a los archivos después del inicio hace que el contenedor comience con una configuración predeterminada y no la configuración personalizada que debe copiarse en su lugar antes de que se inicie el contenedor. Docker afirma que este problema está cerrado, pero aún afecta a mi aplicación.
Esto funciona; Mismo código diferente orden de ejecución.
fuente
Si está seguro de haber hecho lo correcto, pero Docker aún se queja, eche un vistazo a este problema: https://github.com/moby/moby/issues/27134 .
Esto me quemó y parece que reiniciar el motor de la ventana acoplable
service docker restart
solucionará este problema.fuente
Estaba buscando una solución a esto y la carpeta que estaba AGREGANDO o COPIANDO no estaba en la carpeta de compilación, varios directorios arriba o referenciados desde /
Mover la carpeta desde fuera de la carpeta de compilación a la carpeta de compilación solucionó mi problema.
fuente
una de las formas de no usar stdin y mantener el contexto es:
1) en su Dockerfile, debe agregar
2) después, debe ir al padre de / your_dir_to_copy dir
2) luego ejecute este comando
3) después de crear su contenedor
4) Después de que obtenga su directorio copiado en su contenedor
fuente
Es posible que las llamadas anteriores en COPY estén cambiando el directorio.
Agregar una barra al final a la primera llamada
fuente
Me encontré con esto. Copiar algunos directorios no funcionó. Copiar archivos lo hizo. Resultó ser porque los archivos contenidos en .gitignore (no solo .dockerignore) también se ignoran. Ver: https://github.com/zeit/now/issues/790
fuente
.dockerignore
como culpableSé que esto es antiguo, pero algo que señalar. Si crees que todo es como se supone, revisa tu archivo .gitignore :)
Es posible que tenga la carpeta localmente, pero si la carpeta está en su git ignore entonces no está en el servidor, lo que significa que Docker no puede encontrar esa carpeta porque no existe.
fuente
Similar y gracias a la respuesta de tslegaitis , después
muestra
Al verificar ese registro, dice que Docker usará
.gitignore
:Así que arreglé mi
.gitignore
(lo uso como lista blanca en su lugar) y Docker copió el archivo.[Agregué la respuesta porque no tengo suficiente reputación para comentar]
fuente
Tuve este problema a pesar de que mi directorio de origen estaba en el contexto de compilación correcto. Descubrí que la razón fue que mi directorio de origen era un enlace simbólico a una ubicación fuera del contexto de compilación.
Por ejemplo, mi Dockerfile contiene lo siguiente:
Si
dir1
es un enlace simbólico, elCOPY
comando no funciona en mi caso.fuente
Así que esto ha sucedido un par de veces recientemente. Como desarrollador de .Net, usando VisualStudio cambié mi nombre de compilación de
SomeThing
aSomething
como el nombre de DLL, pero esto no cambia el archivo .csproj que permaneceSomeThing.csproj
El Dockerfile usa nombres de archivo linux que distinguen entre mayúsculas y minúsculas, por lo que el Dockerfile recién generado automáticamente estaba tratando de copiar
Something.csproj
que no podía encontrar. Así que cambiar el nombre de ese archivo manualmente (haciéndolo en minúsculas) hizo que todo funcionaraPero ... aquí hay una advertencia de precaución. Este cambio de nombre de archivo en mi computadora portátil con Windows no es recogido por Git, por lo que la fuente del repositorio todavía estaba
SomeThing.csproj
en el repositorio y durante el proceso de CI / CD, la compilación de Docker falló por las mismas razones ...Tuve que cambiar el nombre del archivo directamente como una confirmación en el repositorio ... una pequeña solución desagradable, pero me puso en marcha
tl; dr Si en Windows O / S verifique la distinción entre mayúsculas y minúsculas en el nombre de archivo y tenga en cuenta que los cambios de nombre de archivos locales no se recogen como cambio de Git, así que asegúrese de que su repositorio también se modifique si usa CI / CD
fuente
Algunas buenas respuestas aquí ya. Lo que funcionó para mí fue mover los comentarios a la siguiente línea.
MALO :
BUENO :
fuente