Cheatsheet 05
Problemas comunes
Buscá por el texto del error o por el síntoma. Cada tarjeta: qué ves → por qué pasa → cómo se arregla.
1
Conexión y puertos
El puerto ya está en uso
Bind for 0.0.0.0:3000 failed: port is already allocated- Causa
- Otro contenedor o programa de tu PC ya usa ese puerto del host.
- Solución
- Ver quién lo usa y detenerlo, o cambiar el puerto del host (el de la izquierda):
docker ps # ¿otro contenedor con :3000? netstat -ano | findstr :3000 # Windows: qué proceso lo usa docker run -p 3001:3000 miapp:1
La app no conecta con la base de datos
MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017- Causa
- Dentro de un contenedor,
localhostes el propio contenedor. Mongo está en otro. - Solución
- Usá el nombre del contenedor/servicio como host y asegurate de que estén en la misma red:
mongodb://mati:<password>@monguito:27017/miapp?authSource=admin
getaddrinfo ENOTFOUND monguito
getaddrinfo ENOTFOUND monguito- Causa
- Los contenedores no están en la misma red (o el nombre está mal escrito). Pasa si los creaste a mano sin
--network. - Solución
Con compose no pasa: todos los servicios comparten red.docker network create mired docker network connect mired monguito docker network connect mired chanchito docker network inspect mired # verificar
Mongo: falla la autenticación
MongoServerError: Authentication failed.- Causa
- 1) Falta
?authSource=admin(el usuario root vive en la baseadmin). 2) Cambiaste usuario/contraseña en el compose pero el volumen ya tenía datos:MONGO_INITDB_*solo se aplica la primera vez. - Solución
docker compose down -v # ⚠ borra los datos y recrea el usuario docker compose up
Entro a localhost:3000 y no responde
- Revisar
- ¿Mapeaste el puerto?
docker psdebe mostrar0.0.0.0:3000->3000/tcp.EXPOSEsolo no alcanza. - ¿La app escucha en el puerto de la derecha del
-p? - ¿La app escucha en
0.0.0.0y no solo en127.0.0.1? (Express por defecto ya usa todas las interfaces). - ¿El contenedor sigue vivo?
docker ps -a+docker logs.
- ¿Mapeaste el puerto?
2
Contenedores
El nombre ya está en uso
Conflict. The container name "/monguito" is already in use by container "2d77ac53..."- Causa
- Ya existe un contenedor con ese nombre (aunque esté detenido:
docker ps -a). - Solución
docker start monguito # reutilizarlo docker rm -f monguito # o borrarlo y crearlo de nuevo
El contenedor se apaga apenas arranca
STATUS: Exited (1) 3 seconds ago- Causa
- El proceso principal (
CMD) terminó o tiró error. Un contenedor vive mientras vive su proceso principal. - Solución
docker ps -a # ver el estado / exit code docker logs <nombre> # leer el error real docker run --rm -it miapp:1 sh # entrar y probar a mano
bash: not found
OCI runtime exec failed: exec: "bash": executable file not found in $PATH- Causa
- La imagen es mínima (ej.
alpine) y no trae bash. - Solución
docker exec -it <nombre> sh
No puedo borrar la imagen
conflict: unable to remove repository reference "node:16" (must force) - container 1a2b3c is using its referenced image- Causa
- Algún contenedor (aunque esté detenido) se creó a partir de esa imagen.
- Solución
docker ps -a --filter ancestor=node:16 docker rm <id> docker image rm node:16
docker run mongo -d no queda en segundo plano
- Causa
- Lo que va después del nombre de la imagen se pasa como argumento al proceso, no a Docker.
- Solución
docker run -d mongo # flags SIEMPRE antes de la imagen
3
Build e imágenes
COPY no encuentra el archivo
COPY failed: file not found in build context or excluded by .dockerignore- Causa
- La ruta de origen está fuera del build context (ej.
COPY E/Development/...oCOPY ../otra), o está excluida en.dockerignore. - Solución
- Rutas siempre relativas al contexto; si necesitás carpetas hermanas, subí el contexto:
docker build -t api:1 -f src/Api/Dockerfile . # contexto = raíz
"docker build" requires exactly 1 argument
ERROR: "docker buildx build" requires exactly 1 argument.- Causa
- Falta la ruta del contexto o el espacio antes de ella (
-t miapp.). - Solución
docker build -t miapp:1 .
Cambié el código y el contenedor sigue igual
- Causa
- En producción el código está copiado dentro de la imagen.
upreutiliza la imagen ya construida. - Solución
Para no reconstruir en cada cambio usá el compose de desarrollo.docker compose up --build
El build tarda una eternidad
- Causa
- Se envía un contexto enorme (
node_modules,.git,bin/obj) o el orden de capas rompe la caché. - Solución
- Agregá un .dockerignore y copiá primero
package.json/.csprojantes que el resto (ver caché).
Funcionaba ayer y hoy el build falla
- Causa
FROM node:latestcambió de versión mayor sin avisar.- Solución
- Fijá versiones:
FROM node:18,image: mongo:7.
4
Compose y datos
Desaparecieron los datos de la base
- Causa
- 1) No había volumen, 2) la ruta de destino era incorrecta (no es
/data/db), o 3) usastedocker compose down -v. - Solución
Usávolumes: - mongo-data:/data/db # ruta exacta del motor # y declararlo al final: volumes: mongo-data:downsin-vpara conservar datos.
Error de YAML
yaml: line 8: mapping values are not allowed in this context- Causa
- Indentación inconsistente, tabs en lugar de espacios o falta un espacio después de
:/-. - Solución
docker compose config # valida y señala la línea
La app arranca antes que la base y falla
- Causa
depends_on(ylinks) solo esperan a que el contenedor arranque, no a que la DB acepte conexiones.- Solución
- Healthcheck +
condition: service_healthy(ejemplo), o reintentos en la app; yrestart: unless-stopped.
version is obsolete
WARN: the attribute `version` is obsolete, it will be ignored- Solución
- Borrá la línea
version: "3.9"del YAML. No cambia nada.
node_modules raros con el bind mount
- Causa
.:/home/apppisa la carpeta entera, incluidonode_modulesdel contenedor con el de tu PC (Windows).- Solución
- Volumen anónimo para proteger
node_modulese instalar dentro:volumes: - .:/home/app - /home/app/node_modules
5
Entorno (Windows / Docker Desktop)
No se puede conectar al daemon
error during connect: ... open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.- Causa
- Docker Desktop no está abierto (el motor no corre).
- Solución
- Abrí Docker Desktop y esperá a que diga Engine running. Verificá con
docker version.
nodemon no detecta los cambios
- Causa
- En Windows los eventos de archivos no atraviesan el bind mount.
- Solución
CMD ["nodemon", "-L", "app.js"]-L= legacy watch (polling). Alternativa: tener el proyecto dentro de WSL.
El disco se llena
- Causa
- Imágenes viejas, contenedores detenidos, caché de builds y volúmenes huérfanos.
- Solución
docker system df docker system prune # seguro: no toca volúmenes docker builder prune
Rutas con -v en Windows
- Causa
- Cada shell expande la carpeta actual distinto.
- Solución
# PowerShell docker run -v ${PWD}:/home/app miapp:dev # CMD docker run -v %cd%:/home/app miapp:dev # Git Bash docker run -v "$(pwd)":/home/app miapp:dev
No encontré ese problema. Probá con otra palabra del error.