Si acabas de montar tu aplicación en Docker Compose, la primera pregunta que haces cada mañana es siempre la misma: ¿está todo levantado y funcionando? Y la segunda, cuando algo va mal: ¿dónde está el problema?
Este manual te enseña exactamente cómo comprobar eso: los comandos que necesitas en el día a día para saber qué está corriendo, qué falla, cómo entrar dentro de un contenedor y cómo actualizar tu aplicación sin quebrar nada.
Antes de empezar, una aclaración mental importante porque es la mayor fuente de confusión:
docker-compose.yml de esa carpeta.Piénsalo así:
docker ps → “¿Qué contenedores hay en TODA mi máquina?” (proyecto A, proyecto B, BD compartida…)docker compose ps → “¿Qué servicios del mi proyecto actual están en marcha?”Para la mayoría de tu día a día usarás Compose. Los comandos de Docker puro son para cuando necesitas ver el panorama completo o limpiar la máquina.
Nota técnica: Si tu archivo se llama algo distinto a
docker-compose.yml, necesitarás añadir-f nombre.ymla los comandos de Compose. Y donde veasapp, sustituye por el nombre real de tu servicio en el compose. En Analytics Lane
La pregunta más frecuente: ahora mismo, ¿qué corre?
docker compose ps
Esto te muestra solo los servicios de TU proyecto. Salida típica:
NAME COMMAND STATUS PORTS app python main.py Up 3 minutes 0.0.0.0:8000->8000/tcp db postgres Up 5 minutes (healthy) redis redis-server Up 3 minutes
Qué mirar en cada columna:
Up 3 minutes = corriendo normal.Up 3 minutes (healthy) = corriendo y pasa los chequeos de salud (healthcheck). Es lo ideal.Up 3 minutes (unhealthy) = el contenedor sigue vivo, pero la aplicación no responde bien. Algo falla dentro.Restarting = se cae y se reinicia una y otra vez en bucle. Hay un error en el código o la configuración.Exited (0) = terminó correctamente y se paró. Exited (1) u otro número = terminó con error.8000->8000 significa que el puerto 8000 del contenedor está accesible en el 8000 de tu máquina.Si quieres ver todos los contenedores (no solo los de tu proyecto):
docker ps
E incluso los parados:
docker ps -a
Cuando algo no funciona, el primer sitio donde mirar son siempre los logs. Son tu conexión directa a lo que está pasando dentro del contenedor.
docker compose logs app --tail 50
Te muestra las últimas 50 líneas. --tail 10, --tail 100, lo que necesites.
docker compose logs app -f
El -f significa “follow” (seguir). Verás el log en tiempo real. Ctrl+C para salir. Muy útil mientras estás desarrollando o debugueando.
docker compose logs -f
Sin especificar app, ves los logs de todos los servicios simultáneamente. Útil para ver cómo interactúan.
docker compose logs app -f --timestamps
Si hay un problema a las 14:32:17, verlo en el log es mucho más fácil que en medio de un flujo de eventos.
docker compose logs app --since 1h
Solo logs de la última hora. Útil cuando tienes meses de historial y buscas algo específico.
Para no ahogarte en logs antiguos pero sí ver lo nuevo en vivo:
docker compose logs app --tail 20 -f
Empieza mostrando las últimas 20 líneas, luego sigue en tiempo real. Lo mejor de los dos mundos.
El ciclo que haces constantemente.
docker compose up -d
El -d significa “detached” (desapegado): se ejecuta en segundo plano. Sin -d, ocuparías la terminal viendo los logs.
Si es la primera vez, Compose descargará las imágenes necesarias. Puede tardar.
docker compose stop
Los contenedores se detienen, pero siguen existiendo. Puedes volver a arrancarlos con:
docker compose start
Es como pausar: todo se conserva en memoria, tus volúmenes de datos están intactos.
docker compose restart app
O todos:
docker compose restart
Equivale a parar y volver a arrancar. A veces lo necesitas cuando algo se queda “pegado”.
docker compose down
Para Y ELIMINA los contenedores y la red de tu proyecto. PERO los volúmenes (datos persistentes) se conservan. Bases de datos, modelos descargados, todo sigue ahí.
Si de verdad quieres empezar de cero y BORRAR TODO, incluidos datos:
docker compose down -v
El -v de “volúmenes”. Cuidado: pierdes modelos descargados, bases de datos y cualquier dato guardado en volúmenes.
stop → pausa (contenedores existen, pueden reanudarse).down → desmonta (contenedores se borran, datos persisten).down -v → arrasa (borra TODO, incluyendo datos).A veces necesitas inspeccionar qué hay dentro: variables de entorno, archivos, ejecutar comandos puntuales.
docker compose exec app sh
Te da una terminal dentro del contenedor. Ahora escribes como si estuvieras dentro:
# Ver variables de entorno printenv # Listar archivos ls -la /app # Ver un archivo cat config.json # Salir exit
Si la imagen lo tiene, puedes pedir bash en lugar de sh:
docker compose exec app bash
(Las imágenes pequeñas, como Alpine, solo tienen sh.)
docker compose exec app printenv DATABASE_URL
Te muestra solo el resultado del comando, sin abrir sesión interactiva.
docker compose run --rm app python -c "print('hola')" Esto crea un contenedor nuevo, ejecuta el comando, y lo borra (--rm) cuando acaba. Útil para tareas suelta que no necesitan modificar estado.
Diferencia importante:
exec → entra en un contenedor ya en marcha.run → crea un contenedor nuevo para esa tarea.Cuando algo está raro pero no es obvio.
docker stats
CPU, memoria, red que consume cada contenedor. Ctrl+C para salir. Si algo come memoria como loco, aquí lo verás al instante.
docker inspect nombre_o_id_contenedor
Te da un JSON gigante con TODO: IP, puertos, volúmenes montados, variables de entorno, estado de salud, última hora de inicio, etc.
Si solo quieres el estado de salud:
docker inspect --format '{{json .State.Health}}' nombre | python3 -m json.tool Útil cuando ves unhealthy en docker ps y quieres saber exactamente por qué.
docker compose top app
Te muestra qué procesos están corriendo dentro del contenedor. Tipo ps pero dentro del contenedor.
docker images
Todas las imágenes que tienes en la máquina (descargadas o construidas). Ocupan espacio.
docker volume ls
Los volúmenes son donde persisten datos: modelos descargados, bases de datos, archivos que carga tu app.
docker network ls
Compose crea una red por proyecto. Los contenedores dentro de una red pueden comunicarse por nombre de servicio.
docker system df
Resumen de cuánto espacio tienen imágenes, contenedores y volúmenes. Útil para saber si necesitas limpiar.
Docker acumula basura: imágenes viejas, contenedores parados, caché de builds. De vez en cuando conviene limpiar.
docker system prune
Borra:
Es seguro: no toca volúmenes ni imágenes que usan contenedores vivos.
docker system prune -a
Igual que arriba, pero además borra todas las imágenes no usadas por ningún contenedor. Si luego necesitas esa imagen, la descargará de nuevo.
docker volume prune
Borra volúmenes que no usa nadie. Cuidado: puede eliminar datos persistentes (modelos descargados, base de datos antiguas). Revisa con docker volume ls antes.
El ciclo habitual cuando cambias el código o la configuración.
docker compose up -d --build
Reconstruye la imagen (importante si cambiaste requirements.txt, Dockerfile, etc.) y arranca. El -d en segundo plano.
docker compose up -d --force-recreate
No reconstruye la imagen (más rápido), pero sí destruye y crea contenedores nuevos para que piquen las nuevas variables. Necesario si tocaste .env sin cambiar código.
docker compose build --no-cache && docker compose up -d
Ignora la caché de capas Docker (que normalmente reutiliza pasos anteriores). Usa esto si tienes dudas de que la caché esté causando problemas.
docker compose ps
Mira STATUS. Si todo dice Up y healthy, estás bien.
# 1. ¿El contenedor está sano? docker compose ps # 2. ¿Qué dice el log? docker compose logs app --tail 80 # 3. ¿La configuración es la esperada? docker compose exec app printenv DATABASE_URL
Sigue ese orden. El 80% de los problemas está en uno de esos tres sitios.
docker compose up -d --force-recreate
Recrea los contenedores para que lean el .env actualizado.
docker compose up -d --build docker compose ps docker compose logs app --tail 50 -f
Reconstruye con el código nuevo, verifica que levantó bien, y sigue los logs un momento para asegurarte de que no explota.
docker compose down -v docker compose up -d --build
Borra todo incluidos volúmenes (-v), luego reconstruye todo limpio.
Imprime esto, tenlo en una esquina:
| Quiero… | Comando |
|---|---|
| Ver mi proyecto (servicios activos) | docker compose ps |
| Ver TODO en la máquina | docker ps |
| Ver logs últimas líneas | docker compose logs app --tail 50 |
| Seguir logs en vivo | docker compose logs app -f |
| Arrancar en segundo plano | docker compose up -d |
| Parar (sin borrar) | docker compose stop |
| Reanudar lo parado | docker compose start |
| Reiniciar un servicio | docker compose restart app |
| Recrear tras cambio de config | docker compose up -d --force-recreate |
| Actualizar con código nuevo | docker compose up -d --build |
| Entrar al contenedor | docker compose exec app sh |
| Ver recursos (CPU/RAM) | docker stats |
| Desmontar proyecto | docker compose down |
| Desmontar + borrar datos | docker compose down -v |
| Liberar espacio | docker system prune |
Docker Compose simplifica mucho la gestión del día a día, pero solo si sabes dónde mirar y qué preguntarle. Los 5 comandos que usarás el 80% del tiempo son:
docker compose ps — ¿está todo bien?docker compose logs app -f — ¿qué está pasando?docker compose up -d --build — actualizar código.docker compose up -d --force-recreate — actualizar configuración.docker compose exec app sh — entrar a inspeccionar.Memoriza esos, y el resto es googleable. La máquina está bajo control.
Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.
tslane es la plantilla que uso como punto de partida para mis librerías TypeScript, nacida…
En los artículos anteriores de esta serie vimos la teoría detrás del credit scoring: qué…
expresslanets es la plantilla de API REST con Express y TypeScript que empezó como una…
En el artículo del Dashboard vimos que Pareto/NBD aparecía junto a BG/NBD con un ajuste…
Durante años, CommonJS (require/module.exports) ha sido la forma por defecto de organizar módulos en Node.js,…
Cuando usas k-means tienes que decidir algo incómodo de entrada: cuántos grupos, , vas a…
This website uses cookies.