Ingrese un contenedor Docker en ejecución con un nuevo pseudo TTY
- Crear un nuevo proyecto
- Definir una imagen
- Construir una imagen
- ejecutar un contenedor
-
Ingrese un contenedor Docker en ejecución usando el comando
docker exec
- Conclusión
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
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.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 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