Buscar..


Sintaxis

  • docker stats [OPCIONES] [CONTENEDOR ...]
  • troncos acoplables [OPCIONES] CONTENEDOR
  • tapa acoplable [OPCIONES] CONTENEDOR [ps OPCIONES]

Entrando en un contenedor corriendo

Para ejecutar operaciones en un contenedor, use el comando docker exec . A veces esto se denomina "entrar en el contenedor" ya que todos los comandos se ejecutan dentro del contenedor.

docker exec -it container_id bash

o

docker exec -it container_id /bin/sh

Y ahora tienes una cáscara en tu contenedor corriendo. Por ejemplo, liste los archivos en un directorio y luego deje el contenedor:

docker exec container_id ls -la

Puede usar la -u flag para ingresar al contenedor con un usuario específico, por ejemplo, uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

El uid y el gid no tienen que existir en el contenedor, pero el comando puede dar como resultado errores. Si desea iniciar un contenedor e ingresar inmediatamente dentro para verificar algo, puede hacer

docker run...; docker exec -it $(docker ps -lq) bash

el comando docker ps -lq solo genera el ID del último contenedor (el l en -lq ) iniciado. (esto supone que tiene a bash como intérprete disponible en su contenedor, puede tener sh o zsh o cualquier otro)

Monitoreo del uso de recursos

La inspección del uso de los recursos del sistema es una forma eficiente de encontrar aplicaciones que se comportan mal. Este ejemplo es un equivalente del comando top tradicional para contenedores:

docker stats

Para seguir las estadísticas de contenedores específicos, enumérelos en la línea de comando:

docker stats 7786807d8084 7786807d8085

Las estadísticas de Docker muestran la siguiente información:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

Por defecto, las docker stats muestran la identificación de los contenedores, y esto no es muy útil, si prefiere mostrar los nombres del contenedor, simplemente haga

docker stats $(docker ps --format '{{.Names}}')

Seguimiento de procesos en un contenedor.

La inspección del uso de los recursos del sistema es una forma eficiente de reducir un problema en una aplicación en ejecución. Este ejemplo es un equivalente del comando ps tradicional para contenedores.

docker top 7786807d8084

Para filtrar el formato de la salida, agregue las opciones ps en la línea de comando:

docker top 7786807d8084 faux

O, para obtener la lista de procesos que se ejecutan como root, que es una práctica potencialmente dañina:

docker top 7786807d8084 -u root

El comando docker top resulta especialmente útil cuando se resuelven contenedores minimalistas sin un shell o el comando ps .

Adjuntar a un contenedor corriendo

'Conectarse a un contenedor' es el acto de iniciar una sesión de terminal dentro del contexto en el que se ejecuta el contenedor (y cualquier programa en él). Esto se usa principalmente para fines de depuración, pero también puede ser necesario si se deben pasar datos específicos a programas que se ejecutan dentro del contenedor.

El comando attach se utiliza para hacer esto. Tiene esta sintaxis:

docker attach <container>

<container> puede ser el ID del contenedor o el nombre del contenedor. Por ejemplo:

docker attach c8a9cf1a1fa8

O:

docker attach graceful_hopper

Es posible que necesite sudo los comandos anteriores, dependiendo de su usuario y cómo cargador de muelle está configurado.

Nota: Adjuntar solo permite que una sola sesión de shell se adjunte a un contenedor a la vez.

Advertencia: todas las entradas del teclado se reenviarán al contenedor. Golpear Ctrl-c matará tu contenedor.

Para desprenderse de un contenedor adjunto, presione sucesivamente Ctrl-p y luego Ctrl-q

Para adjuntar varias sesiones de shell a un contenedor, o simplemente como alternativa, puede usar exec . Usando la identificación del contenedor:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Usando el nombre del contenedor:

docker exec -i -t graceful_hopper /bin/bash

exec ejecutará un programa dentro de un contenedor, en este caso /bin/bash (un shell, probablemente uno que el contenedor tiene). -i indica una sesión interactiva, mientras que -t asigna un pseudo-TTY.

Nota: A diferencia de adjuntar , presionar Ctrl-c solo terminará el comando exec 'd cuando se ejecute de forma interactiva.

Imprimiendo los logs

Seguir los registros es la forma menos intrusiva de depurar una aplicación en ejecución en vivo. Este ejemplo reproduce el comportamiento de la tail -f some-application.log tradicional tail -f some-application.log en el contenedor 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Este comando básicamente muestra la salida estándar del proceso contenedor (el proceso con pid 1).

Si sus registros no incluyen la marca de tiempo de forma nativa, puede agregar la --timestamps .

Es posible mirar los registros de un contenedor detenido, ya sea

  • iniciar el contenedor docker run ... ; docker logs $(docker ps -lq) con la docker run ... ; docker logs $(docker ps -lq)

  • Encuentra la identificación del contenedor o el nombre con

docker ps -a

y entonces

docker logs container-id o

docker logs containername

Como es posible mirar los registros de un contenedor detenido

Depuración del proceso de contenedor Docker

Docker es solo una forma elegante de ejecutar un proceso, no una máquina virtual. Por lo tanto, la depuración de un proceso "en un contenedor" también es posible "en el host" simplemente examinando el proceso contenedor en ejecución como un usuario con los permisos adecuados para inspeccionar esos procesos en el host (por ejemplo, root). Por ejemplo, es posible enumerar cada "proceso contenedor" en el host ejecutando un simple ps como root:

sudo ps aux

Todos los contenedores Docker que se estén ejecutando actualmente se mostrarán en la salida.

Esto puede ser útil durante el desarrollo de la aplicación para depurar un proceso que se ejecuta en un contenedor. Como usuario con los permisos adecuados, se pueden usar utilidades de depuración típicas en el proceso de contenedor, como strace, ltrace, gdb, etc.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow