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

Docker Exec:su comando Goto para ejecutar comandos en Docker

¿Alguna vez ha necesitado ver lo que sucede dentro de un contenedor Docker? Los contenedores están destinados a ser idempotentes:si hay un problema, vuelva a implementar un nuevo contenedor. A menudo, la vida no es tan simple. Debe ejecutar comandos en el contenedor para identificar el problema. Aquí es donde docker exec comando puede ayudar.

Este artículo le enseñará cómo ejecutar comandos en un contenedor Docker en ejecución usando docker exec comando.

Requisitos

Para seguir los ejemplos de este artículo, deberá cumplir con lo siguiente.

  • Cualquier versión reciente de Docker Desktop funcionará en Windows, Linux o macOS. Este tutorial utiliza la versión 3.1.0 que se ejecuta en Windows 10.

Inicio de un contenedor NGINX

Docker exec ejecuta comandos en contenedores. Pero, para hacer eso, primero debe tener un contenedor para ejecutar esos comandos. Empecemos descargando una imagen de Docker y creando un contenedor de demostración.

  1. Cree un nuevo directorio, este tutorial usa C:\gitrepos\test , para almacenar los archivos utilizados para el contenedor.

2. Cree un archivo, llamado dockerfile (sin extensión), que contenga el siguiente código. El Dockerfile define los pasos necesarios para crear un contenedor.

FROM nginx:alpine
 COPY index.html /usr/share/nginx/html/index.html

3. A continuación, cree un archivo, en el mismo directorio, llamado index.html que contiene el siguiente código. Este es un archivo HTML que, cuando se inicia el contenedor, mostrará un mensaje Hello World.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Hello World - Nginx Docker</title> 
    <style> 
       h1{ font-weight:lighter; font-family: Arial, Helvetica, sans-serif; 
       } 
    </style> 
    </head> 
    <body> 
       <h1> 
          Hello World 
       </h1> 

    </body> 
    </html>

4. Ahora cree el contenedor Nginx Docker. Como el Dockerfile está en el directorio de trabajo actual, especifique . para que el motor de Docker sepa que debe buscar allí. Además, asegúrese de etiquetar el contenedor con my-ngnix usando el t parámetro para asegurar una referencia más fácil en el futuro.

docker build -t my-nginx .

5. Ahora que el contenedor está construido, inícielo con el comando de ejecución de Docker.

# rm - Informs Docker to delete the container after it has stopped 
# d - Return control of the command-line after the command has been executed 
# p - Map the internal container port 80 to an external port 80 docker run --rm -d -p 80:80 my-nginx

6. Finalmente, abra su navegador web y vaya a http://localhost/ para ver lo siguiente.

Ejecución de comandos con Docker Exec

Al ejecutar comandos en un contenedor de Docker, es posible que deba ejecutar un comando de forma interactiva. Ejecutar comandos de forma interactiva significa escribir un comando, obtener comentarios, escribir otro comando, etc. Los comandos interactivos toman el control de su sesión y le impiden hacer cualquier otra cosa.

Pero, ¿qué sucede si ya conoce los comandos para enviar al contenedor con anticipación y desea ejecutar comandos en segundo plano? En ese caso, puede ejecutar comandos no interactivos. Los comandos no interactivos le permiten enviar un comando a Docker y devolver instantáneamente el control de la consola.

Ubicar el nombre y la identificación del contenedor

Ahora que tiene el contenedor construido, puede ejecutar comandos dentro del contenedor. Antes de ejecutar un comando, localice el nombre o ID del contenedor NGINX. El nombre o la ID funcionarán en los comandos de Docker. Con eso en mente, ¡recordar la identificación puede ser más difícil que el nombre!

Para mostrar cualquier información de contenedor en ejecución, ejecute Docker ps Comando para generar la siguiente información.

docker ps

Copie el ID único, e17e4b6be01a , o el nombre generado aleatoriamente mystifying_chandrasekhar a su portapapeles para su uso posterior.

Ejecución de un comando no interactivo con Docker Exec

Como ejemplo de ejecución de un comando no interactivo, copie y ejecute el siguiente comando para obtener una lista de archivos en /var/log directorio con el ls -l dominio. Pase todo después del nombre del contenedor, mystifying_chandrasekhar , al Docker exec comando.

docker exec mystifying_chandrasekhar ls -l /var/log

Evitar la salida de la consola con los comandos de Docker

Al devolver instantáneamente el control de la consola al usuario, las operaciones grandes evitan atar la consola. Renunciar a la salida de la consola con la d separada opción. El siguiente comando crea el archivo /tmp/execWorks a través del touch comando dentro del contenedor y no muestra ningún resultado en la consola.

docker exec -d mystifying_chandrasekhar touch /tmp/execWorks

Ejecución de comandos interactivos con Docker Exec

Hasta este momento, ha aprendido a ejecutar comandos no interactivos en un contenedor Docker con docker exec . Sin embargo, es posible que se enfrente a un momento en el que deba solucionar problemas de un contenedor, por ejemplo, cuando necesite emitir comandos al contenedor de forma interactiva. En ese caso, debe ejecutar los comandos de forma interactiva.

Ejecutar comandos de forma interactiva con docker exec requiere dos opciones, i y t . El i La opción mantiene STDIN abierto, lo que permite enviar comandos al contenedor y el t La opción asigna un pseudo-TTY (PTY), un canal de comunicación, para escribir comandos.

Copie y pegue el siguiente comando para abrir un símbolo del sistema interactivo en el contenedor de Docker en ejecución con el shell Bourne (sh), como lo indica el cambio de aviso a / # .

docker exec -it mystifying_chandrasekhar sh

Una vez en el shell, ahora ejecute los siguientes comandos para demostrar la lista de archivos desde dentro del contenedor. Finalmente, ejecutando exit Comando para salir del shell interactivo.

ls -l /var/log
exit

Para abrir un indicador interactivo en un directorio específico, pase la ruta a w opción que indica a Docker que inicie el shell en un directorio específico.

Pasar variables ambientales a un contenedor en ejecución

Muchos programas usan variables de entorno para establecer configuraciones al inicio. Por ejemplo, la mayoría de las aplicaciones Java requieren el JAVA_HOME variable ambiental para establecer la ruta de Java.

Puede pasar variables de entorno a una sesión utilizando e opción. Por ejemplo, tal vez necesite completar una variable de entorno llamada MYVAR en un contenedor en funcionamiento. Para hacer eso, use el e opción y proporcione el par clave/valor de MYVAR="<some value>" como se muestra a continuación.

docker exec -it -e MYVAR="hello" mystifying_chandrasekhar sh
echo $MYVAR

Pasar variables de entorno con un archivo

Si tiene muchas variables ambientales o una configuración compartida, puede ser más fácil almacenar esas variables en un archivo. Pase el archivo a través de una ruta relativa o absoluta a Docker con --env-file opción. Esta técnica se usa a menudo para proporcionar credenciales seguras a un contenedor. ¡Asegúrese de nunca enviar credenciales al control de versiones!

Cree un archivo de texto llamado env-vars.txt con las variables ambientales a pasar y sus valores. Este archivo se puede llamar como quieras y no necesita el .txt extensión de archivo.

Pase las variables ambientales a Docker con el env-file opción. Verifica que las variables estén disponibles con el echo comando como se muestra en la siguiente captura de pantalla.

# Pass the env-vars.txt file and open an interactive prompt
docker exec -it --env-file env-vars.txt mystifying_chandrasekhar sh
# Verify that the environmental variables are available in the Docker container
echo $MYVAR
echo $FOO
echo $SOMETHING

Interactuando con un contenedor en ejecución como un usuario diferente

En producción, las aplicaciones a menudo se ejecutan como un usuario específico para restringir su acceso. Si está ejecutando aplicaciones como un usuario específico en producción, también debe hacerlo mientras prueba los comandos.

En este ejemplo, el contenedor Docker se ejecuta como nginx usuario. Pase al usuario al w opción para decirle a Docker que inicie el contenedor como nginx cuenta. El whoami comando, ejecutado desde dentro del contenedor, confirma que nginx el usuario es de hecho utilizado.

docker exec -it -u nginx mystifying_chandrasekhar sh
whoami

Siguientes pasos

Ha aprendido a ejecutar comandos dentro de un contenedor en ejecución utilizando docker exec dominio. Utilizando el exec comando para ingresar e interrogar contenedores en ejecución, tiene una herramienta nueva y poderosa en su arsenal para solucionar problemas de contenedores Docker.

Ahora intente llevar lo que ha aprendido un paso más allá y use el control de versiones de Git para colocar un sitio web estático en el contenedor, en lugar de copiar un solo archivo. Si Git es nuevo para usted, entonces el artículo Una guía para principiantes de Visual Studio Code y Git es un excelente lugar para comenzar.


Docker
  1. Algunos comandos DOCKER

  2. Hoja de referencia rápida de comandos de Docker

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

  4. Creación de su primer contenedor de Docker Windows Server

  5. Cómo cambiar la zona horaria de un contenedor Docker

Cómo copiar archivos con Docker cp a su Docker Container

21 comandos esenciales que todo usuario de Docker debe conocer

Comandos de Docker para gestionar el ciclo de vida de los contenedores (guía definitiva)

ctop:interfaz superior para monitorear contenedores Docker

40 comandos importantes de Docker para desarrolladores de software

Ponga un temporizador en sus comandos en ejecución con el comando de tiempo de espera en Linux