runc · Docker
El mensaje
OCI runtime create failed: exec: "bash": executable file not found in $PATH: unknown
Qué significa
El contenedor se creó, pero el programa que le pediste ejecutar no estaba en el $PATH de su interior. Las imágenes basadas en Alpine traen sh y no bash, así que docker run -it myapp bash o un CMD ["bash", ...] acaban exactamente en este error, igual que cualquier herramienta que supusieras dentro de la imagen y solo exista en tu host. docker run --rm -it myapp sh te da un shell para ver qué contiene realmente la imagen. Si de verdad necesitas bash, RUN apk add --no-cache bash en el Dockerfile lo añade, al precio de una imagen más grande.
El arreglo
docker run --rm -it myapp sh- Lo imprime
- runc
- Docker
- 12
Los errores de Docker solo se vuelven legibles cuando los sitúas en una capa —el cliente que no alcanza al demonio, el registro que te rechaza, un RUN que falla durante la compilación y un contenedor que muere al arrancar son cuatro problemas distintos— y en las capas de compilación y ejecución la línea en sí no es el motivo: el motivo está en la salida del comando que corría dentro, y el precio de cada arreglo también cambia según la capa.
Cómo leer un mensaje de error
- Lee desde la primera línea. Cuanto más abajo, más son las tripas de la herramienta; la causa suele estar arriba.
- Si hay un archivo y un número de línea, empieza ahí: no el marco superior de la pila, sino la línea más alta que nombre un archivo tuyo.
- Busca el mensaje literal, pero quita antes tus rutas y nombres de variables: eso es lo que impide que la búsqueda coincida.
- La misma condición se redacta distinto según la versión. Si los resultados no cuadran, añade el número de versión.
- Antes de pegar un arreglo, comprueba qué descarta. Algunos no se pueden deshacer.
Preguntas frecuentes
Q. ¿Qué significa «OCI runtime create failed: exec: "bash": executable file not found in $PATH: unknown»?
El contenedor se creó, pero el programa que le pediste ejecutar no estaba en el $PATH de su interior. Las imágenes basadas en Alpine traen sh y no bash, así que docker run -it myapp bash o un CMD ["bash", ...] acaban exactamente en este error, igual que cualquier herramienta que supusieras dentro de la imagen y solo exista en tu host. docker run --rm -it myapp sh te da un shell para ver qué contiene realmente la imagen. Si de verdad necesitas bash, RUN apk add --no-cache bash en el Dockerfile lo añade, al precio de una imagen más grande.
Q. ¿Cómo se arregla?
docker run --rm -it myapp sh — antes de ejecutarlo, mira arriba qué descarta este comando.
Q. ¿Qué herramienta lo imprime?
runc. Está en Docker y el mensaje tiene 13 palabras.