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, localhost es 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
docker network create mired
docker network connect mired monguito
docker network connect mired chanchito
docker network inspect mired   # verificar
Con compose no pasa: todos los servicios comparten red.

Mongo: falla la autenticación

MongoServerError: Authentication failed.
Causa
1) Falta ?authSource=admin (el usuario root vive en la base admin). 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 ps debe mostrar 0.0.0.0:3000->3000/tcp. EXPOSE solo no alcanza.
  • ¿La app escucha en el puerto de la derecha del -p?
  • ¿La app escucha en 0.0.0.0 y no solo en 127.0.0.1? (Express por defecto ya usa todas las interfaces).
  • ¿El contenedor sigue vivo? docker ps -a + docker logs.
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/... o COPY ../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. up reutiliza la imagen ya construida.
Solución
docker compose up --build
Para no reconstruir en cada cambio usá el compose de desarrollo.

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 / .csproj antes que el resto (ver caché).

Funcionaba ayer y hoy el build falla

Causa
FROM node:latest cambió 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) usaste docker compose down -v.
Solución
volumes:
  - mongo-data:/data/db   # ruta exacta del motor
# y declararlo al final:
volumes:
  mongo-data:
Usá down sin -v para 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 (y links) 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; y restart: 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/app pisa la carpeta entera, incluido node_modules del contenedor con el de tu PC (Windows).
Solución
Volumen anónimo para proteger node_modules e 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.