GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo ejecutar un comando en un contenedor Docker en ejecución

Por lo general, desea que las aplicaciones de Docker estén completamente contenidas, pero a veces, para fines de desarrollo o automatización, es útil poder trabajar con contenedores de Docker como si fueran máquinas virtuales de Linux. Docker proporciona herramientas para ejecutar comandos e incluso shells completos dentro de contenedores.

Ejecución de comandos en contenedores

Para ejecutar un comando en un contenedor, necesitará su ID de contenedor, a menos que haya configurado un nombre específico para ese contenedor. Esta es una cadena hexadecimal larga que puede encontrar en la lista de procesos de Docker:

docker ps

Luego, puede usar el exec -it comando para ejecutar dentro del contenedor. Por ejemplo, ver la salida de un archivo de registro:

docker exec -it containerID tail /var/log/nginx/access.log

También puede ejecutar scripts dentro de contenedores:

docker exec -it containerID script.sh

El -it las banderas son para “modo interactivo” y TTY respectivamente, y se usan casi todo el tiempo. Hay algunas otras banderas que puedes usar:

  • --workdir o -w cambia el directorio actual antes del comando.
  • --detach , o -d , ejecuta el comando en segundo plano.
  • --env , o -e , establece las variables de entorno antes de ejecutarse.
  • --env-file hace lo mismo, pero es más seguro para manejar secretos.
  • --privileged ejecuta el comando con permisos extendidos.
  • --user se ejecuta como un usuario diferente

Por supuesto, esto solo funciona en un contenedor en ejecución. Si desea pausar un contenedor para realizar el mantenimiento, deberá implementar actualizaciones a través de una nueva versión de imagen o realizar cambios en los datos montados en volumen desde el sistema operativo host.

SSH en un contenedor

No está limitado a comandos simples, en realidad puede abrir un shell ejecutando /bin/bash como el comando. Es posible que tenga limitaciones en cuanto a las herramientas disponibles (la mayoría de los contenedores cuentan con una instalación de Linux bastante básica), pero hace que ejecutar muchos comandos sea mucho más fácil.

docker exec -it containerID /bin/bash

Esto es simplemente un shell accesible desde el host, que funciona bien en la mayoría de los casos. Pero, si lo desea, puede configurar sus contenedores para que estén completamente disponibles a través de SSH como un VPS. Puede obtener más información sobre cómo configurarlo en nuestra guía para ejecutar un servicio SSH en un contenedor Docker.

RELACIONADO: Cómo usar SSH en un contenedor Docker

Copia de archivos hacia y desde contenedores

Ejecutar comandos con exec -it funciona, pero todavía hay una capa entre el host y el contenedor que impide la creación de secuencias de comandos. Por un lado, si bien es fácil enviar comandos a un contenedor, es más difícil obtener resultados del sistema de archivos.

Si bien puede canalizar el STDOUT de exec -it a otros servicios en el sistema operativo host, también puede copiar archivos hacia y desde el sistema de archivos del contenedor. Por ejemplo, extraer un archivo de registro y pegarlo en el host:

docker cp container:/var/log/nginx/example.log example.log

O sacando directorios completos:

docker cp nginx:/etc/nginx/ nginxconfig/

Sin embargo, si hace esto regularmente, puede considerar usar un enlace o un montaje de volumen para que los datos sean directamente accesibles desde el host.

RELACIONADO: Cómo usar Docker Cp para copiar archivos entre el host y los contenedores


Docker
  1. ¿Cómo ejecutar un comando dentro de un contenedor Systemd en ejecución?

  2. Cómo ejecutar MySQL en un contenedor Docker

  3. ¿Cómo enviar una señal para que el programa se ejecute en un contenedor docker?

  4. ¿Cómo agregar usuarios al contenedor Docker?

  5. Cómo ejecutar un trabajo cron dentro de un contenedor docker

Cómo ejecutar una aplicación .NET en Docker

Cómo verificar si el demonio Docker o un contenedor se está ejecutando

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo ejecutar contenedores Docker