[SOLUCIONADO] Error 'failed to compute cache key' en Docker Build
El error failed to compute cache key: failed to walk: lstat ...: no such file or directory durante el comando docker build ocurre cuando la instrucción COPY o ADD dentro del Dockerfile hace referencia a un archivo o directorio local que no existe dentro del contexto de construcción de Docker.
El Diagnóstico Rápido
.dockerignoredocker build asegurando la sintaxis . al final del comandoSolución Rápida (1 Minuto):
- Revisa que la ruta del archivo copiado exista dentro de la carpeta actual donde ejecutas
docker build .- Comprueba que el archivo no esté excluido en el archivo
.dockerignore.- Si usas subcarpetas, ejecuta la compilación especificando el contexto correcto:
docker build -f docker/Dockerfile .
La Solución Paso a Paso
-
1
Paso 1: Entender el contexto de construcción de Docker (Build Context)
Cuando ejecutas
docker build -t mi-imagen ., el punto final.define el contexto. Docker empaqueta y envía todos los archivos de esa carpeta al daemon de Docker.Si tu
Dockerfilecontiene:DOCKERFILECOPY package.json ./Pero ejecutas
docker builddesde un directorio padre dondepackage.jsonno está en la raíz, Docker arrojará el errorfailed to compute cache key.Solución: Múdate a la carpeta raíz de tu proyecto o ajusta la ruta en el comando de compilación:
BASH# Ejecutar desde la raíz del proyecto indicando la ubicación del Dockerfile docker build -t mi-app:latest -f ./docker/Dockerfile . -
2
Paso 2: Verificar reglas en .dockerignore
Abre el archivo
.dockerignoreubicado en la raíz del proyecto. Si por accidente añadiste una regla que ignora el archivo que intentas copiar conCOPY:PLAINTEXT# Si tienes esto en .dockerignore: src/config.jsonDocker no incluirá
src/config.jsonen el contexto y fallará confailed to compute cache key.Solución: Elimina la regla del
.dockerignoreo añade una excepción usando!:PLAINTEXT!src/config.json -
3
Paso 3: Mayúsculas y minúsculas en sistemas Linux
En sistemas operativos Linux, los nombres de archivos distinguen entre mayúsculas y minúsculas (case-sensitive). Si en tu código el archivo se llama
App.jspero en elDockerfileescribiste:DOCKERFILECOPY app.js ./El motor de Docker no encontrará
app.jsy cancelará la construcción. Corrige el nombre para que coincida exactamente.
Consejo de Prevención
Prácticas de seguridad recomendadas:
- Utiliza Builds multi-etapa (Multi-stage builds) limpias para evitar copiar archivos innecesarios.
- Mantén un archivo
.dockerignoreordenado que solo excluya.git,node_modules, y archivos de entorno.env.