[SOLUCIONADO] Error 'failed to compute cache key' en Docker Build
El Diagnóstico Rápido
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.
Solució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 .
🚀 Cómo solucionar el error paso a paso
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 Dockerfile contiene:
COPY package.json ./
Pero ejecutas docker build desde un directorio padre donde package.json no está en la raíz, Docker arrojará el error failed 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:
# Ejecutar desde la raíz del proyecto indicando la ubicación del Dockerfile
docker build -t mi-app:latest -f ./docker/Dockerfile .
Paso 2: Verificar reglas en .dockerignore
Abre el archivo .dockerignore ubicado en la raíz del proyecto. Si por accidente añadiste una regla que ignora el archivo que intentas copiar con COPY:
# Si tienes esto en .dockerignore:
src/config.json
Docker no incluirá src/config.json en el contexto y fallará con failed to compute cache key.
Solución: Elimina la regla del .dockerignore o añade una excepción usando !:
!src/config.json
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.js pero en el Dockerfile escribiste:
COPY app.js ./
El motor de Docker no encontrará app.js y 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.