Saber crear y arrancar contenedores es solo el principio. En el trabajo diario pasarás mucho tiempo gestionándolos: viendo cuáles tienes, consultando su configuración, leyendo sus registros para depurar problemas, entrando en ellos para investigar, copiando ficheros entre el host y el contenedor, y limpiando los que ya no necesitas. En esta lección reuniremos todas estas herramientas de gestión, que forman el conjunto de comandos que más utilizarás a lo largo de tu vida con Docker. Aprender a manejarlas con soltura te convertirá en un usuario eficaz y autónomo.

Listar Contenedores

El primer paso para gestionar algo es saber qué tienes. El comando docker ps es tu punto de partida.

# Solo los contenedores en ejecución
docker ps

# Todos los contenedores, incluidos los detenidos
docker ps -a
  • docker ps: muestra los contenedores activos con su ID, imagen, estado, puertos y nombre.
  • docker ps -a (all): incluye también los contenedores detenidos. Imprescindible cuando buscas uno que ya no está corriendo.

Opciones útiles para afinar el listado:

# Mostrar solo los IDs (útil para encadenar comandos)
docker ps -q

# Mostrar el último contenedor creado
docker ps -l
  • -q (quiet): devuelve solo los identificadores, ideal para usar dentro de otros comandos.
  • -l (latest): muestra el contenedor más reciente, esté en el estado que esté.

Inspeccionar un Contenedor

Cuando necesitas conocer todos los detalles de un contenedor (su IP, sus volúmenes, sus variables de entorno, su configuración de red), usas docker inspect.

docker inspect servidor_web
  • Devuelve un documento JSON enorme con absolutamente toda la información del contenedor.

Como ese JSON es muy extenso, normalmente filtrarás solo lo que te interesa con -f (plantilla de formato):

# Obtener solo la dirección IP del contenedor
docker inspect -f '{{ .NetworkSettings.IPAddress }}' servidor_web

# Obtener el estado actual
docker inspect -f '{{ .State.Status }}' servidor_web
  • -f '{{ ... }}': aplica una plantilla de formato Go para extraer un campo concreto.
  • En el primer ejemplo, obtienes solo la IP; en el segundo, el estado (running, exited, etc.).

Leer los Logs

Cuando algo no funciona, los logs son tu primera fuente de información. El comando docker logs muestra la salida que el contenedor ha escrito por consola.

docker logs servidor_web
  • Muestra todo lo que el proceso principal ha enviado a la salida estándar y de error.

Opciones muy útiles para depurar:

# Seguir los logs en tiempo real (como tail -f)
docker logs -f servidor_web

# Mostrar solo las últimas 50 líneas
docker logs --tail 50 servidor_web

# Mostrar marcas de tiempo
docker logs -t servidor_web
  • -f (follow): mantiene la salida abierta y muestra las nuevas líneas según aparecen. Pulsa Ctrl+C para salir.
  • --tail 50: limita la salida a las últimas 50 líneas, útil cuando el log es enorme.
  • -t (timestamps): añade la fecha y hora de cada línea.

Entrar en un Contenedor con exec

A veces necesitas ejecutar un comando dentro de un contenedor que ya está en marcha: para investigar, revisar ficheros o probar algo. Para eso está docker exec.

docker exec -it servidor_web bash
  • docker exec: ejecuta un comando en un contenedor que ya está corriendo.
  • -it: modo interactivo con terminal (igual que en docker run).
  • bash: abre una shell dentro del contenedor. Para salir, escribe exit.

Importante: si la imagen es muy ligera (como Alpine) y no tiene bash, usa sh:

docker exec -it servidor_web sh

También puedes ejecutar comandos puntuales sin abrir una shell:

# Ver los procesos que corren dentro del contenedor
docker exec servidor_web ps aux

# Comprobar el contenido de un fichero de configuración
docker exec servidor_web cat /etc/nginx/nginx.conf
  • Estos comandos se ejecutan dentro del contenedor y devuelven su salida directamente a tu terminal.

Diferencia clave: docker exec actúa sobre un contenedor en ejecución, mientras que docker run crea uno nuevo.

Copiar Ficheros con docker cp

A menudo necesitas mover ficheros entre el host y un contenedor: para sacar un log, inyectar una configuración o respaldar datos. El comando docker cp lo hace en ambas direcciones.

# Del host AL contenedor
docker cp ./config.local.conf servidor_web:/etc/nginx/conf.d/config.conf

# Del contenedor AL host
docker cp servidor_web:/var/log/nginx/access.log ./access.log
  • La sintaxis es docker cp origen destino.
  • Para referirte a una ruta dentro del contenedor, usa el formato nombre_contenedor:/ruta.
  • En el primer ejemplo copiamos un fichero del host al contenedor; en el segundo, al revés.

Renombrar un Contenedor

Si un contenedor quedó con un nombre poco descriptivo, puedes cambiarlo sin recrearlo.

docker rename web_temporal servidor_produccion
  • docker rename nombre_actual nombre_nuevo: cambia el nombre del contenedor.
  • El contenedor sigue funcionando igual; solo cambia su etiqueta identificativa.

Eliminar Contenedores

Cuando un contenedor ya no te sirve, conviene eliminarlo para liberar espacio.

# Eliminar un contenedor detenido
docker rm servidor_web

# Forzar la eliminación de un contenedor en ejecución
docker rm -f servidor_web
  • docker rm: elimina un contenedor detenido. Si está corriendo, dará error.
  • -f (force): detiene y elimina el contenedor aunque esté en ejecución. Úsalo con cuidado.

Eliminar contenedores en bloque

# Eliminar TODOS los contenedores detenidos
docker container prune

# Eliminar varios a la vez por nombre
docker rm contenedor1 contenedor2 contenedor3
  • docker container prune: borra de golpe todos los contenedores que estén detenidos. Docker te pedirá confirmación. Es la forma más cómoda de limpiar el sistema.

Resumen de Comandos de Gestión

Comando Función
docker ps / ps -a Listar contenedores activos / todos
docker inspect Ver la configuración completa de un contenedor
docker logs Consultar la salida (registros) del contenedor
docker exec Ejecutar un comando en un contenedor en marcha
docker cp Copiar ficheros entre host y contenedor
docker rename Cambiar el nombre de un contenedor
docker rm Eliminar un contenedor
docker container prune Eliminar todos los contenedores detenidos

Errores Comunes y Consejos

  • Usar bash en imágenes que no lo tienen: muchas imágenes ligeras (Alpine) solo incluyen sh. Si bash falla, prueba con sh.
  • Intentar docker rm sobre un contenedor en marcha: primero deténlo con docker stop, o usa docker rm -f.
  • Confundir exec con run: exec entra en un contenedor existente; run crea uno nuevo. Si abres una shell con run, no estarás en el contenedor que crees.
  • Invertir el origen y destino en docker cp: recuerda que el formato del contenedor es siempre nombre:/ruta.
  • Olvidar limpiar: los contenedores detenidos se acumulan. Ejecuta docker container prune de vez en cuando.
  • Consejo: combina docker ps -q con otros comandos para automatizar tareas (por ejemplo, detener todos los contenedores a la vez).

Ejercicios

Ejercicio 1: inspeccionar y leer logs

Lanza un contenedor de Nginx, averigua su dirección IP interna con docker inspect y consulta sus últimas 20 líneas de log.

Ejercicio 2: entrar y explorar

Entra en un contenedor de Nginx en ejecución con una shell interactiva, comprueba qué procesos están corriendo dentro y sal.

Ejercicio 3: copiar y limpiar

Crea un fichero de texto en tu host, cópialo dentro de un contenedor de Nginx, verifica que está ahí y, finalmente, elimina todos los contenedores detenidos.

Soluciones

Solución 1

docker run -d --name web nginx
docker inspect -f '{{ .NetworkSettings.IPAddress }}' web
docker logs --tail 20 web

docker inspect con la plantilla devuelve solo la IP; --tail 20 limita la salida a las últimas líneas.

Solución 2

docker run -d --name web nginx
docker exec -it web bash
# Ya dentro:
ps aux
exit

ps aux lista los procesos dentro del contenedor; exit cierra la shell sin detener el contenedor.

Solución 3

echo "hola docker" > prueba.txt
docker run -d --name web nginx
docker cp prueba.txt web:/usr/share/nginx/html/prueba.txt
docker exec web cat /usr/share/nginx/html/prueba.txt   # Muestra 'hola docker'

docker stop web
docker container prune                                  # Confirma con 'y'

El fichero se copia al contenedor y se verifica con cat; luego se detiene y se eliminan todos los contenedores parados.

Conclusión

En esta lección hemos reunido las herramientas esenciales para gestionar contenedores en el día a día: listarlos con docker ps, inspeccionar su configuración con docker inspect, depurar mediante docker logs, entrar en ellos con docker exec, mover ficheros con docker cp, renombrarlos y eliminarlos de forma individual o en bloque. Estos comandos son los que usarás una y otra vez en tu trabajo con Docker.

En la siguiente lección, Redes en Docker, daremos los primeros pasos para conectar contenedores entre sí: entenderás qué es una red en Docker, los tipos básicos que existen y cómo lograr que dos contenedores se comuniquen.

© Copyright 2026. Todos los derechos reservados