Si está buscando una vista detallada de todos los componentes principales de Docker a partir de imágenes, contenedores, etc. de Docker, el comando de inspección de Docker es para usted.
En este tutorial, aprenderá cómo convertirse en un detective para descubrir información detallada sobre muchos componentes de Docker para la depuración, la resolución de problemas o simplemente su mera curiosidad.
¡Comencemos!
Requisitos previos
Si desea seguir paso a paso, asegúrese de tener lo siguiente:
- Docker:este tutorial usa Docker v19.03.11 en Ubuntu 18.04.5 LTS.
- Cualquier imagen de Docker descargada y disponible. Este tutorial utiliza la imagen NGINX Docker más reciente disponible en Docker Hub.
- Al menos un contenedor ejecutándose en el host de Docker.
Inspección de imágenes de Docker con Docker Inspect
La Docker Inspect
puede proporcionar información sobre muchos componentes diferentes de Docker, pero primero comencemos con uno de los componentes más populares; imágenes Si ha descargado una imagen, ¿cómo verifica la información sobre esa imagen? Vamos a averiguarlo.
Suponiendo que tiene al menos una imagen en su host de Docker, use el inspect
comando para consultar esa imagen. El siguiente comando asume que tienes una imagen llamada nginx
en su servidor.
docker image inspect nginx
Una vez ejecutado, el comando anterior devuelve una gran cantidad de información a través de JSON sobre esa imagen en particular. Algunos atributos notables son:
- La etiqueta de imagen.
- La hora en que se creó la imagen.
- El nombre de host del contenedor asociado con la imagen nginx de Docker.
- Los puertos de red que el contenedor pone a disposición de la red externa.
- También notará los volúmenes adjuntos al contenedor que pertenece a la imagen nginx de Docker.
Obtención de información detallada sobre las redes Docker
La docker inspect
el comando no solo se limita a obtener información sobre imágenes y contenedores; también puede consultar redes. Las redes Docker permiten que los contenedores se comuniquen de diferentes maneras, como a través de una red puente (una red privada), una red host (una red pública) o una red superpuesta.
Conocer las redes de Docker es importante ya que le permite cambiar a otra red de Docker en cualquier momento según la necesidad de la aplicación al desconectarse y luego volver a conectarse.
Asumiendo que todavía estás en la terminal:
1. Ejecute el siguiente comando. La docker network ls
El comando enumera todas las redes presentes en Docker. Necesitará el resultado de este comando para encontrar la ID de la red.
docker network ls
A continuación, pase una ID de red a docker inspect network
dominio. Este comando devuelve diversa información sobre la red en particular, como se muestra a continuación.
docker inspect network 4748f122c987
1. El tipo de red.
2. La dirección de subred que usa la red.
3 y 4. Información resumida sobre cada contenedor que utiliza esta red en particular.
Comprender las plantillas Go de Docker y el Format
Parámetro
Hasta ahora, ha aprendido a usar el comando de inspección de Docker sin usar ningún parámetro de opciones adicional. Pero si necesita manipular el formato de salida, considere usar el --format
bandera. El --format
El parámetro usa plantillas de Go para filtrar y mostrar la información devuelta desde docker inspect
.
Se utilizan varias funciones junto con el indicador de formato, como unir, imprimir, tabla, etc. ¡Discutamos algunas de ellas!
Por ejemplo, tal vez desee unir algunos valores de la salida de un contenedor en particular. Si es así, el join
el comando funciona bien. A continuación, verá que join
El comando concatena cadenas juntas (nginx, -g, daemon off
) con cada elemento separado por un separador (,
).
docker inspect --format '{{join .Args " , "}}' container_id
¿Quizás le gustaría capitalizar un valor? Usa el upper
comando.
docker inspect --format "{{upper .Name}}" container_id
Puede encontrar muchos ejemplos diferentes del uso del Format
parámetro.
Encontrar el nombre de la imagen base de un contenedor Docker
En la sección anterior, vio cómo obtener una vista detallada de todas sus imágenes de Docker, incluidos los contenedores que usan esas imágenes. Pero, ¿qué sucede si ya conoce la ID de un contenedor y necesita encontrar rápidamente la imagen a partir de la cual se creó? Puede proporcionar el ID del contenedor a docker inspect
.
Para encontrar el nombre de la imagen a partir de la cual se crea un contenedor en particular, ejecute el siguiente docker inspect
dominio. El siguiente comando pasa el ID del contenedor (8f34d039fa3a
en este caso) a docker inspect
y usa el Format
parámetro para devolver solo la image
valor de la Config
nodo en la salida JSON.
# 8f34d039fa3a is the container represented with ContainerID.
docker inspect --format='{{.Config.Image}}' 8f34d039fa3a
Puedes ver lo que la Config
completa el nodo se ve a continuación y donde la Image
proviene el nombre.
Encontrar la dirección IP, la dirección Mac y los enlaces de puerto de un contenedor
Aunque ahora sabe cómo encontrar la red que usa un contenedor, ¿cómo sabe qué dirección IP o dirección Mac y enlaces de puerto en esa red usa un contenedor? ¡Lo adivinaste! docker inspect
.
Para restringir la dirección IP que usa un contenedor, pase la ID del contenedor a docker inspect
dominio. Nuevamente, use el Format
parámetro para filtrar el JSON no deseado para llegar exactamente a lo que está buscando.
Verás el Format
el argumento del parámetro a continuación le dice a docker inspect
solo para devolver el valor incrustado dentro de NetworkSettings
→Networks
→ IPAddress
Atributo JSON usando el range
atributo. El atributo de rango le permite iterar sobre una matriz, configurando el .
valor a cada elemento de la matriz.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my_container
Verá la principal NetworkSettings
debajo del nodo y donde la IPAddress
el valor está anidado.
Del mismo modo, para encontrar la dirección MAC del contenedor, use docker inspect
comando contenedor como se muestra a continuación.
Nuevamente, verá que el Format
El argumento del parámetro a continuación usa el range
atributo pero esta vez, busque la dirección Mac del contenedor comprobando NetworkSettings
→Networks
→ Mac address
.
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' 3dd206041249
Finalmente, para verificar todos los enlaces de puerto de un contenedor, ejecute el siguiente docker inspect
dominio. Verás el Format
El argumento del parámetro a continuación usa el range
atributo para encontrar los enlaces de puerto del contenedor comprobando NetworkSettings
→HostPort
.
One debe saber acerca de los enlaces de puerto porque si algún puerto ya está en uso, no debe volver a usarse; de lo contrario, arrojará un mensaje de error que indica que el puerto ya está asignado.
docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' 8f34d039fa3a
Obtención de una vista detallada del volumen de Docker usando Docker Inspect
Hasta ahora, aprendió cómo encontrar información detallada sobre las imágenes, los contenedores y las redes, pero no aprendió sobre el almacenamiento. Cambiemos eso.
Para garantizar que el tutorial tenga al menos un volumen montado adjunto a un contenedor, primero creemos un contenedor y montemos un volumen de almacenamiento.
Si ya tiene un volumen de almacenamiento montado en un contenedor, puede omitir esta parte.
El siguiente comando crea un nuevo contenedor Docker llamado my_container
, expone el puerto 80 al host (-p 80:80
), monta un volumen basado en el /var/container_dir del host directorio llamado mounted_val (-v mounted_vol:/var/container_dir
) usando nginx
imagen.
docker run --name my_container -p 80:80 -v mounted_vol:/var/container_dir nginx
Ahora que tiene un volumen montado en un contenedor, proporcione el nombre del volumen a docker volume inspect
. Observe a continuación que el comando devuelve la salida JSON y solo proporciona información sobre el volumen de almacenamiento montado.
docker volume inspect mounted_vol
Conclusión
Ahora debería poder usar docker inspect
Comando en muchas situaciones diferentes, desde consultar información sobre imágenes, contenedores, redes y almacenamiento.
¿Cómo planeas usar docker inspect
? para consultar información sobre su propio entorno Docker?