Ingrese un contenedor Docker en ejecución con un nuevo pseudo TTY

David Mbochi Njonge 20 junio 2023
  1. Crear un nuevo proyecto
  2. Definir una imagen
  3. Construir una imagen
  4. ejecutar un contenedor
  5. Ingrese un contenedor Docker en ejecución usando el comando docker exec
  6. Conclusión
Ingrese un contenedor Docker en ejecución con un nuevo pseudo TTY

Los contenedores ejecutan versiones de nuestras aplicaciones, y solo se puede acceder a la información crucial cuando se ejecutan los contenedores. Por ejemplo, podríamos querer saber dónde se almacenan los registros de nuestro contenedor.

Para lograr esto, debemos ingresar al contenedor en ejecución para obtener esta información para este contenedor específico. En este tutorial, aprenderemos los diferentes enfoques que podemos aprovechar para ingresar a un contenedor docker en ejecución con un nuevo pseudo TTY.

Crear un nuevo proyecto

Usaremos la aplicación Nginx en todos los ejemplos de este tutorial para mostrar cómo ingresar a un contenedor en ejecución.

Abra WebStorm IDE y seleccione Archivo > Nuevo > Proyecto para crear un nuevo proyecto. En la ventana abierta, seleccione Proyecto vacío y cambie el nombre del proyecto de sin título a docker-enter-container o use el nombre que prefiera.

Finalmente, presione el botón etiquetado como Crear para generar el proyecto.

Cree un archivo llamado index.html en la carpeta actual y copie y pegue el siguiente código en el archivo.

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
          crossorigin="anonymous">
</head>
<body>
<table class="table table-dark">
    <thead>
    <tr>
        <th scope="col">#</th>
        <th scope="col">First</th>
        <th scope="col">Last</th>
        <th scope="col">Handle</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <th scope="row">1</th>
        <td>Mark</td>
        <td>Otto</td>
        <td>@mdo</td>
    </tr>
    </tbody>
</table>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
        crossorigin="anonymous"></script>
</body>
</html>

En este archivo, hemos usado Bootstrap para crear una página web simple que muestra una tabla. Esta es la página que se devolverá cuando ejecutemos nuestro contenedor.

Sea libre de cambiar el código para mostrar cualquier otra información.

Definir una imagen

Cree un archivo llamado Dockerfile y copie y pegue las siguientes instrucciones de Docker en el archivo.

FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
  1. FROM: establece la imagen base sobre la que crear nuestra imagen personalizada siguiendo las instrucciones posteriores. Esta debe ser la primera instrucción del archivo.
  2. COPIAR: copia todos los archivos y carpetas del directorio actual en el sistema de archivos de imagen. En este caso, copiamos todos los archivos y carpetas a /usr/share/nginx/html y usamos esta ubicación ya que es el requisito de esta imagen.

Construir una imagen

Abra una nueva ventana de terminal presionando el atajo de teclado ALT+F12 en su computadora. Luego ejecute el siguiente comando para crear una imagen con la etiqueta enter-container.

~/WebstormProjects/docker-enter-container$ docker build --tag enter-container:latest .

Este comando ejecuta las instrucciones de Dockerfile secuencialmente, y podemos ver las instrucciones que se ejecutan en la ventana de la terminal, como se muestra a continuación.

=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:b87c350e6c69e0dc7069093dcda226c4430f3836682af4f649f2af9  0.0s
 => [2/2] COPY . /usr/share/nginx/html

ejecutar un contenedor

Usando la misma ventana de terminal, ejecute el siguiente comando que ejecuta un contenedor con el nombre enter-container-prod.

~/WebstormProjects/docker-enter-container$ docker run --name enter-container-prod -d -p 3000:80 enter-container:latest

Este comando ejecuta un contenedor y expone el puerto 3000 en el host para escuchar el puerto 80 en el contenedor. Para ver la aplicación, envíe una solicitud a localhost:3000 (http://localhost:3000/) en el navegador para mostrar la tabla en la página index.html.

La siguiente sección usa este contenedor para mostrar los diferentes enfoques que podemos usar para ingresar al contenedor.

Ingrese un contenedor Docker en ejecución usando el comando docker exec

Cuando queremos ejecutar un nuevo comando en un contenedor en ejecución, usamos el comando exec. Tenga en cuenta que este comando solo se ejecuta cuando el proceso principal del contenedor se está ejecutando y no se reinicia cuando reiniciamos el contenedor.

El comando se ejecuta en el directorio predeterminado si no se especifica un directorio de trabajo mediante la instrucción WORKDIR. En la misma ventana de terminal, ejecuta el siguiente comando para ingresar al contenedor que ejecutamos en la sección anterior.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/sh

Producción :

/ #

Tenga en cuenta que también hemos utilizado un indicador adicional, -it, que le indica a Docker que asigne un pseudo-TTY conectado a los contenedores STDIN, creando un shell interactivo en el contenedor.

Si ejecutamos el comando ls, podemos ver que estamos en el directorio raíz del contenedor, como se muestra a continuación.

/ # ls

Producción :

bin                   etc                   mnt                   run                   tmp
dev                   home                  opt                   sbin                  usr
docker-entrypoint.d   lib                   proc                  srv                   var

Podemos reemplazar el comando de shell /bin/sh con sh, lo que nos permite crear un shell interactivo en el contenedor. Esto es mucho más fácil de recordar y se puede usar, como se muestra a continuación.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod sh

Utilice el comando bash como alternativa al comando sh

Podemos usar el comando docker exec con una alternativa al comando sh llamado bash. Este comando también nos permite crear un shell interactivo en el contenedor.

El comando bash se puede usar de la misma manera que hemos usado el comando sh en el ejemplo anterior. Salga de la sesión de shell usando CTRL+D y ejecute el siguiente comando para ingresar a un contenedor Docker usando el comando bash.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/bash

Podemos reemplazar el comando de shell /bin/bash con bash, lo que nos permite crear un shell interactivo en el contenedor. Esto es mucho más fácil de recordar y se puede usar, como se muestra a continuación.

~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod bash

Tenga en cuenta que el comando de shell depende del shell instalado en el contenedor. Algunos contenedores tienen dos comandos de shell, mientras que otros solo tienen uno.

Conclusión

En este tutorial, hemos aprendido diferentes enfoques que podemos aprovechar para ingresar a un contenedor Docker usando un nuevo pseudo-TTY. Los enfoques cubiertos en este tutorial incluyen el uso del comando docker exec con los comandos bash o sh de shell.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

Artículo relacionado - Docker Container