Los contenedores en segundo plano permiten ejecutar servicios Docker sin dejar tu terminal bloqueada. El contenedor sigue activo, pero tú recuperas el prompt para consultar logs, abrir otra sesión, detenerlo o seguir trabajando.
La opción clave es -d, también llamada modo detached. Es muy útil para servicios como Nginx, bases de datos, APIs o laboratorios que deben quedar funcionando mientras revisas el estado desde otros comandos.
👉 Y recuerda, si quieres aprender más de Linux, visita el curso de Linux gratis.
🐳 Si quieres aprender más de Docker, visita el curso de Docker gratis.
Contenedores en segundo plano
Cuando ejecutas un contenedor en primer plano, ves su salida directamente y tu terminal queda conectada al proceso. Cuando lo ejecutas en segundo plano, Docker devuelve el control a la terminal y el proceso queda administrado por el daemon.
| Modo | Qué pasa con la terminal | Cuándo usarlo |
|---|---|---|
| Primer plano | La salida queda conectada a tu terminal. | Pruebas rápidas o comandos que terminan pronto. |
| Segundo plano | La terminal vuelve al prompt y el contenedor sigue corriendo. | Servicios, laboratorios persistentes y pruebas web. |
| Interactivo | Puedes escribir dentro del proceso o shell. | Explorar o depurar manualmente. |
| Exec | Abres un proceso adicional en un contenedor existente. | Entrar sin reiniciar ni recrear. |
La idea principal es sencilla: -d no hace que la aplicación sea mágica ni persistente por sí sola; solo desacopla tu terminal del proceso principal del contenedor.
Antes de empezar
Usa una máquina de laboratorio y asegúrate de que el puerto 8080 no está ocupado. Los ejemplos crean contenedores con nombre claro para que puedas limpiarlos al final sin tocar otros servicios.
- Necesitas Docker instalado y permisos para ejecutar contenedores.
- Los ejemplos usan la imagen oficial nginx:alpine.
- No uses nombres de contenedores reales de producción para practicar.
- Si un comando de limpieza incluye borrado forzado, revisa dos veces el nombre antes de ejecutarlo.
Ejecutar un servicio con -d
Este ejemplo arranca Nginx en segundo plano, publica el puerto 8080 del host y después consulta estado y logs. Es un caso típico para entender el modo detached.
docker run -d --name web-segundo-plano -p 8080:80 nginx:alpine
docker ps --filter name=web-segundo-plano
docker logs --tail 20 web-segundo-planoQué debes comprobar
- docker run -d devuelve un identificador y libera la terminal.
- docker ps muestra el contenedor como running si el proceso sigue activo.
- docker logs permite leer la salida aunque no estés conectado al proceso.
- El mapeo de puertos hace que puedas probar el servicio desde el host si el puerto está libre.
Si el contenedor aparece y desaparece, no es un problema del modo detached: normalmente el proceso principal terminó o falló. En ese caso revisa logs e inspección antes de recrearlo.
Logs, exec y attach
Una vez que el contenedor está en segundo plano, hay tres acciones que suelen confundirse: leer logs, abrir otro proceso con exec o reconectarte al proceso principal con attach. No hacen lo mismo.
| Comando | Qué hace | Riesgo típico |
|---|---|---|
| docker logs | Muestra la salida generada por el proceso. | No permite ejecutar comandos dentro. |
| docker exec | Ejecuta un proceso nuevo dentro del contenedor. | Depende de que exista una shell o el binario pedido. |
| docker attach | Conecta tu terminal al proceso principal. | Salir mal puede enviar señales y detener el contenedor. |
Para entrar a revisar archivos o procesos, normalmente es más seguro usar exec que attach. Attach sirve cuando quieres reconectarte al proceso principal y entiendes cómo salir sin cortarlo.
docker exec -it web-segundo-plano sh
pwd
exitdocker attach web-segundo-plano
# Para salir sin detenerlo: Ctrl+p y después Ctrl+qDetener y limpiar
Cuando termines el laboratorio, detén el contenedor de forma ordenada y después elimínalo. Así no dejas servicios escuchando en puertos ni contenedores detenidos acumulados.
docker stop web-segundo-plano
docker rm web-segundo-planodocker stop pide al proceso que termine con una señal de parada y espera un tiempo de gracia. docker rm elimina el contenedor detenido. Si usas volúmenes nombrados, no asumas que se borran automáticamente.
Reinicio automático
Para servicios de laboratorio que quieres mantener activos, Docker permite políticas de reinicio. Úsalas con criterio: reiniciar automáticamente puede ayudar, pero también puede ocultar una aplicación que falla en bucle.
docker run -d --name web-reinicio --restart unless-stopped nginx:alpine
docker inspect web-reinicio --format '{{.State.Status}} {{.HostConfig.RestartPolicy.Name}}'
docker rm -f web-reinicio- no: no reinicia automáticamente.
- on-failure: reinicia si el proceso termina con error.
- unless-stopped: reinicia salvo que lo pares manualmente.
- always: intenta mantenerlo activo incluso tras reinicios del daemon.
Errores comunes
- Usar -d con un comando que termina al instante y pensar que Docker falló.
- Confundir docker attach con docker exec.
- No mirar logs cuando el contenedor se detiene solo.
- Publicar un puerto ya ocupado y no revisar el mensaje de error.
- Dejar contenedores de laboratorio corriendo durante días sin necesidad.
- Usar reinicio automático para tapar errores de configuración.
- Ejecutar borrado forzado sobre un contenedor que sí presta un servicio real.
Si algo no funciona, el orden seguro es: mirar estado, leer logs, inspeccionar configuración y solo después decidir si reiniciar, recrear o borrar. Esa secuencia evita perder pistas importantes.
Lecciones relacionadas del curso Docker
- Contenedores en modo interactivo: compara segundo plano con sesiones interactivas.
- Ciclo de vida de un contenedor Docker: entiende estados y transiciones.
- Cómo ejecutar un contenedor en Docker: repasa docker run desde cero.
- Cómo entrar dentro de un contenedor: aprende a usar exec correctamente.
- Cómo leer logs de contenedores: diagnostica servicios sin entrar manualmente.
- Cómo inspeccionar un contenedor: revisa estado y configuración real.
Documentación oficial y recursos
- docker run reference: opciones oficiales de ejecución, incluido detached.
- docker logs reference: consulta y seguimiento de logs.
- docker exec reference: ejecutar procesos en contenedores existentes.
- docker attach reference: reconexión al proceso principal.
- docker stop reference: parada ordenada de contenedores.
- Start containers automatically: políticas oficiales de reinicio.
Los contenedores en segundo plano son la forma habitual de ejecutar servicios con Docker durante desarrollo y pruebas. La clave es no perder visibilidad: aunque la terminal quede libre, el contenedor debe seguir siendo observable con logs, estado e inspección.
Si recuerdas una regla, que sea esta: detached no significa olvidado. Arranca el servicio, verifica que sigue running, revisa sus logs y límpialo cuando ya no lo necesites.

