Inicio » [SOLUCIONADO] Error 'failed to compute cache key' en Docker Build
Sistemas y Servidores

[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):

  1. Revisa que la ruta del archivo copiado exista dentro de la carpeta actual donde ejecutas docker build .
  2. Comprueba que el archivo no esté excluido en el archivo .dockerignore.
  3. 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:

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

BASH
# 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:

PLAINTEXT
# 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 !:

PLAINTEXT
!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:

DOCKERFILE
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 .dockerignore ordenado que solo excluya .git, node_modules, y archivos de entorno .env.