Docker exec en contenedor
Docker es una herramienta de código abierto ampliamente utilizada que simplifica la implementación, el escalado y la gestión de aplicaciones mediante tecnología de contenedores. Con los contenedores Docker, los desarrolladores pueden empaquetar aplicaciones y sus dependencias en contenedores portátiles, garantizando coherencia entre distintos entornos.
¿Qué hace docker exec?
Uno de los comandos clave de Docker es docker exec, que permite a los usuarios ejecutar comandos dentro de un contenedor en ejecución. Esta función posibilita la interacción directa con los procesos y el entorno del contenedor, lo que resulta útil para la resolución de problemas o la gestión de aplicaciones.
Docker es versátil y compatible con diversos sistemas operativos, incluidos Linux, Windows y macOS. Incluso puede instalarse en un servidor privado virtual (VPS). Configurar Docker requiere seguir pasos específicos adaptados a la plataforma elegida.
¿Cómo usar el comando docker exec?
Antes de usar el comando docker exec, asegúrate de que Docker esté correctamente instalado en tu sistema. Luego identifica el contenedor específico en el que deseas ejecutar el comando.
En esta guía explorarás el comando docker exec. Demostraremos cómo ejecutar docker exec como root dentro de un contenedor Docker utilizando distintos casos de uso.
Requisitos previos
- Verifica que tienes instalada la versión más reciente de Ubuntu en tu sistema.
- Instala Docker siguiendo los pasos de la documentación oficial de Docker.
- Añade tu usuario al grupo Docker para poder ejecutar comandos Docker sin introducir la contraseña de administrador cada vez.
Iniciar un contenedor Docker
Para ilustrar cómo usar el comando docker exec, primero iniciaremos un contenedor.
Primero descarga una imagen en un contenedor Docker:
# docker pull redis
Aquí tienes un ejemplo usando un contenedor Redis:
# docker run -d --name myredis redis
Este comando inicia un contenedor Redis en modo desacoplado (flag -d), ejecutándolo en segundo plano. El contenedor, llamado myredis, servirá como entorno de ejemplo para ejecutar comandos.
Ejecutar comandos dentro de un contenedor Docker
Primero necesitarás su ID de contenedor para ejecutar comandos dentro de él. Puedes obtener el ID listando los contenedores en ejecución con el siguiente comando:
# docker ps
Una vez tengas el ID del contenedor (por ejemplo, 6a8b7d170a12), podrás usarlo para ejecutar comandos dentro del contenedor.
Sintaxis del comando docker exec
La sintaxis general del comando docker exec es:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Estas son las opciones más utilizadas:
-d, --detach: ejecuta el comando en segundo plano.
--detach-keys: define una secuencia de teclas personalizada para desacoplarse del contenedor.
-e, --env: especifica variables de entorno para el comando.
--env-file: carga variables de entorno desde un archivo.
-i, --interactive: mantiene la entrada estándar abierta incluso si no está conectada a un terminal.
--privileged: concede privilegios extendidos al comando.
-t, --tty: asigna un pseudo-terminal al comando.
-u, --user: ejecuta el comando como un usuario específico o UID.
-w, --workdir: establece el directorio de trabajo dentro del contenedor para el comando.
Ejecutar docker exec en modo no interactivo
En modo no interactivo puedes ejecutar un único comando dentro de un contenedor en ejecución. Por ejemplo, para comprobar la versión de Redis dentro de un contenedor activo, usa el siguiente comando:
# docker exec <container_id> redis-server --version
Este comando ejecuta redis-server --version dentro del contenedor indicado (sustituye <container_id> por el ID real, por ejemplo 6a8b7d170a12). Recupera y muestra la versión de Redis directamente en tu terminal.
Ejecutar comandos en una shell interactiva
El modo interactivo permite abrir una sesión de shell dentro del contenedor, lo que hace posible ejecutar múltiples comandos y explorar su entorno. Para acceder a una shell interactiva, usa la siguiente sintaxis:
docker exec -it CONTAINER COMMAND [ARG...]
Por ejemplo, para abrir una shell en un contenedor Redis en ejecución, usa:
# docker exec -it 6a8b7d170a12 bash
Sustituye <container_id> por el ID de tu contenedor Redis. Este comando abre una sesión de shell dentro del contenedor, permitiéndote interactuar con el entorno y ejecutar múltiples comandos.
Ejemplo: ejecutar un comando dentro de la shell interactiva
Una vez dentro de la shell, puedes ejecutar comandos específicos de Redis. Por ejemplo:
# redis-cli ping
Este comando comprueba el estado del servidor Redis en ejecución dentro del contenedor, devolviendo PONG si funciona correctamente. Ahora puedes explorar el sistema de archivos y el entorno del contenedor según sea necesario.
Ejecutar docker exec como otro usuario
Por defecto, los comandos se ejecutan con docker exec como root dentro del contenedor. Sin embargo, puedes especificar otro usuario. Para ejecutar un comando como un usuario concreto, usa la siguiente sintaxis:
docker exec -u USERNAME CONTAINER COMMAND [ARG...]
Por ejemplo, para ejecutar el comando whoami como el usuario Redis dentro de un contenedor Redis:
# docker exec -u redis 6a8b7d170a12 whoami
Ejecutar comandos con variables de entorno
Puedes ejecutar comandos dentro de un contenedor estableciendo variables de entorno específicas con la siguiente sintaxis:
docker exec -e VAR_NAME=VAR_VALUE CONTAINER COMMAND [ARG...]
Por ejemplo, para ejecutar el comando env dentro de un contenedor Redis con una variable personalizada:
# docker exec -e MY_VARIABLE='testing_env' <container_id> env
Esto establece MY_VARIABLE en testing_env y luego ejecuta env para mostrar las variables de entorno del contenedor. Este método resulta útil para pasar datos sensibles, como claves API, de forma segura al contenedor sin exponerlos en su entorno permanente.
Conclusión
Esta guía cubrió diversas formas de interactuar con contenedores Docker, incluida la ejecución de comandos en modo no interactivo, el acceso a una shell interactiva, el uso de variables de entorno y la ejecución de docker exec como root y como otro usuario. Estos métodos proporcionan flexibilidad para gestionar contenedores Docker. Para más detalles, consulta la documentación oficial de Docker exec.
BlueVPS.com ofrece hosting VPS de alto rendimiento con tráfico ilimitado, escalabilidad y entorno dedicado. Empieza ahora y disfruta de un hosting fiable y personalizable.
Blog