docker-modos-ejecucion-interactivo-detached

Modos de ejecución Interactivo vs Detached

  • 4 min

Los modos de ejecución en Docker determinan cómo interactúa el proceso principal de un contenedor con los flujos de entrada y salida de nuestra consola.

Cuando empiezas con Docker, una de las primeras cosas que te confunde es el comportamiento de la terminal.

  • A veces lanzas un comando y te devuelve el control inmediatamente, dejando el contenedor corriendo “por detrás”.
  • Otras veces, el contenedor secuestra tu terminal, te muestra logs infinitos y no puedes escribir nada más.
  • Y otras veces, lanzas un contenedor… y se muere al instante.

Todo esto depende. precisamente, de los modos de ejecución. En Docker hay dos formas principales de correr un contenedor,

ModoFlagTu objetivoEjemplo
Detached-dServicios de larga duración (Web, BBDD, APIs)docker run -d nginx
Interactivo-itScripts puntuales o entrar a trastear (Shell, REPL)docker run -it python

Vamos a verlos en profundidad 👇

Modo Detached (-d)

Este es el modo más habitual para servidores web, bases de datos y servicios que deben estar siempre encendidos.

Cuando usamos el flag -d (Detached), le estamos diciendo a Docker que arranque el contenedor en segungo plano, imprima su ID y devuelva el control de la terminal inmediatamente

Veámoslo con un ejemplo práctico,

docker run -d -p 80:80 nginx

¿Qué sucede?

  1. Docker arranca Nginx.
  2. Te imprime un ID largo (ej: a1b2c3...).
  3. Te devuelve el prompt para que sigas trabajando. El contenedor sigue vivo “ahí detrás”. Si cierras tu terminal, el contenedor sigue funcionando.

Modo Interactivo (-it)

El modo detached está muy bien para servidores, pero… ¿y si quiero entrar en un contenedor? ¿Y si quiero ejecutar un script de Python manual, o abrir una terminal de Ubuntu?

Si lanzas un Ubuntu en modo detached, se apagará al instante (luego explicamos por qué 1️⃣). Necesitas el modo interactivo.

La “bandera mágica” aquí es -it. En realidad son dos banderas juntas:

  • -i (Interactive): Mantiene abierto el canal de entrada (STDIN). Es decir, permite que el contenedor “escuche” lo que tecleas.
  • -t (TTY): Asigna una pseudo-terminal. Hace que la salida tenga formato bonito, colores y prompt, como una terminal real.

Por ejemplo,

docker run -it ubuntu /bin/bash

¿Qué sucede?

  1. Docker arranca Ubuntu.
  2. Tu prompt cambia. Ya no estás en tu PC (ej: C:\Users\Luis>), ahora pone algo como root@a1b2c3:/#.
  3. ¡Estás dentro! Si haces ls, verás los archivos de Linux del contenedor, no los de tu Windows.

Para salir, simplemente escribe exit. Al escribir exit en el proceso principal del contenedor, este se detiene. El contenedor pasa a estado Exited.