Cómo conectarse a un contenedor Docker

27 feb 2021 3 min di lettura
Cómo conectarse a un contenedor Docker
Indice dei contenuti

Introducción

La conexión a un contenedor Docker en ejecución es útil cuando desea ver lo que sucede dentro del contenedor. Si el contenedor Docker no funciona como se esperaba, puede conectarse al contenedor u obtener un shell de contenedor y ejecutar comandos como ps o top, instalar nuevos paquetes, etc.

En este tutorial, explicaremos cómo conectarse al proceso principal del contenedor en ejecución y cómo obtener un shell en un contenedor en ejecución.

Conectarse a un contenedor

Si bien puede ejecutar varios procesos en un contenedor, la mayoría de los contenedores Docker solo ejecutan un único proceso. El comando que se ejecuta cuando se inicia un contenedor se especifica mediante la instrucción ENTRYPOINT y /o RUN.

El comando docker attach le permite adjuntar la terminal al contenedor en ejecución. Esto es útil cuando desea ver lo que está escrito en la salida estándar en tiempo real o para controlar el proceso de forma interactiva.

Para comprender mejor cómo funciona el comando adjuntar, ejecutemos un nuevo contenedor Nginx separado usando la imagen oficial de Nginx.

docker container run --name my_nginx -d -p 8080:80 nginx

La opción -p 8080: 80 indica a Docker que asigne el puerto 8080 del contenedor al puerto 80 en la computadora host.

Enumere los contenedores para asegurarse de que el contenedor "my_nginx " se esté ejecutando:

docker container ls

Debería recibir un mensaje de salida similar al siguiente:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 37dh4dh47mlk nginx "nginx -g 'daemon of…" 5 minutes ago Up 6 seconds 0.0.0.0:8080->80/tcp my_nginx

Adjuntar al contenedor usando el ID o el nombre del contenedor:

docker container attach my_nginx

El comando de imagen nginx predeterminado que se ejecuta cuando se ejecuta el contenedor está configurado en CMD ["nginx", "-g", "daemon off;"]. Cuando emite el comando adjuntar, el terminal se conecta al proceso nginx.

Abra la dirección 127.0.0.1:8080 en su navegador y vea el resultado del proceso nginx en tiempo real.

192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
 192.168.33.1 - - [04/Oct/2019:21:12:28 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

Para obtener acceso a los registros del contenedor, le recomendamos que utilice el comando docker logs.

Para salir del contenedor sin detenerlo, use la combinación de teclas CTRL-p CTRL-q. Al presionar CTRL-c se detiene el contenedor.

Llevar una concha en un contenedor

El comando docker exec le permite ejecutar comandos dentro de un contenedor en ejecución.

Para ver cómo funciona y cómo usar el comando exec, inicie un nuevo contenedor. Usaremos la imagen oficial de MySQL:

docker container run --name my_mysql -d mysql

Esto creará un contenedor llamado " my_mysql ".

Para ejecutar un comando dentro del contenedor, ejecute el siguiente comando:

docker container exec -it my_mysql ls /var

La opción -i significa interactivo y -t le dice a Docker que asigne un pseudodispositivo TTY. El comando ls listará todos los archivos y directorios dentro del directorio /var del contenedor:

backups cache lib local lock log mail opt run spool tmp

Para introducir un shell en el contenedor, es decir, para entrar en el contenedor, inicie una nueva sesión de shell ejecutando el binario de shell. Puede usar sh, bash o cualquier otro shell incluido en la imagen.

El siguiente comando creará una nueva sesión de Bash dentro del contenedor:

docker container exec -it my_mysql /bin/bash

El símbolo del sistema cambiará, lo que indica que ahora está trabajando en el shell del contenedor.

Desde aquí, puede ejecutar comandos como lo haría en cualquier otro servidor Linux. Por ejemplo, para obtener una lista de las variables de entorno actuales, escriba env:

env

La salida se verá así:

HOSTNAME=r847dj4hb9fr
 MYSQL_ROOT_PASSWORD=secret
 PWD=/HOME=/root
 MYSQL_MAJOR=8.0
 GOSU_VERSION=1.7
 MYSQL_VERSION=8.0.17-1debian9
 TERM=xterm
 SHLVL=1
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 _=/usr/bin/env

Conclusión

Los comandos docker exec y docker attach le permiten conectarse a un contenedor en ejecución. Para obtener un shell interactivo en un contenedor, use el comando exec para iniciar una nueva sesión de shell. El comando adjuntar conecta la terminal a un contenedor en ejecución.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.