Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 6

Inspecting Docker Containers

Recommended resources

Olá! Vamos dar continuidade ao nosso aprendizado em Docker.

Na lição anterior, você aprendeu a configurar contêineres em tempo de execução usando variáveis de ambiente com docker run. Vimos como essa técnica é crucial para desacoplar a configuração da imagem, permitindo que o mesmo artefato seja executado em diferentes ambientes. Agora, surge uma pergunta natural: "Como posso verificar se o contêiner está realmente configurado da maneira que eu espero?".

Nesta lição, vamos explorar a ferramenta de diagnóstico que responde a essa pergunta: docker inspect. Nosso objetivo é que você aprenda a usar este comando para obter metadados detalhados e a configuração completa de um contêiner. Para um desenvolvedor, docker inspect é como um depurador para a infraestrutura do seu contêiner, permitindo que você investigue tudo, desde o endereço IP até as variáveis de ambiente e as configurações de volume.

Mergulhando nos Detalhes: O que é docker inspect?

O comando docker inspect é uma ferramenta poderosa que retorna informações de baixo nível sobre qualquer objeto gerenciado pelo Docker, como contêineres, imagens, volumes ou redes. A saída padrão é um grande documento JSON contendo todos os detalhes de configuração e estado do objeto inspecionado.

Vamos começar inspecionando o contêiner PostgreSQL que criamos na lição anterior. Primeiro, certifique-se de que ele esteja em execução. Se não estiver, inicie-o novamente:

# Se o contêiner 'meu-banco-pg' não estiver rodando, inicie-o
docker start meu-banco-pg

# Se você o removeu, crie-o novamente
# docker run -d --name meu-banco-pg -e POSTGRES_PASSWORD=minhasenhasupersecreta postgres

Agora, execute o comando inspect:

docker inspect meu-banco-pg

Você verá uma grande quantidade de texto JSON. Este output pode ser intimidador no início, mas contém um tesouro de informações.

Docker Inspect Command Output
Esta imagem ilustra a estrutura do output JSON do `docker inspect`, mostrando várias seções de configuração de um contêiner, como `Config`, `Env` e `ExposedPorts`.

Dentro deste JSON, você encontrará detalhes cruciais, como:

  • State: Informações sobre o estado do contêiner (rodando, parado), seu Process ID (PID) no host, etc.
  • Config.Env: Uma lista de todas as variáveis de ambiente, incluindo as que você definiu com -e. Esta é a maneira direta de confirmar as configurações da lição anterior.
  • NetworkSettings: Detalhes sobre a conexão de rede do contêiner, incluindo seu endereço IP, endereço MAC e mapeamentos de porta.
  • Mounts: Informações sobre quaisquer volumes ou bind mounts anexados ao contêiner, essencial para depurar a persistência de dados.
  • HostConfig: Configurações específicas do host, como limites de recursos (CPU, memória) e regras de reinicialização.

Domando o JSON: Filtrando a Saída com --format

Analisar o JSON completo manualmente é impraticável para o uso diário. A verdadeira força do docker inspect reside na sua capacidade de extrair informações específicas usando a flag --format (ou sua forma abreviada -f).

Esta flag utiliza a sintaxe de templates da linguagem Go para formatar a saída. Como desenvolvedor, você pode pensar nisso como uma maneira de consultar programaticamente o objeto JSON.

O vídeo a seguir, do canal DevOps Journey, oferece uma excelente demonstração prática de como usar o docker inspect de forma eficaz, desde a visualização do JSON bruto até a aplicação de filtros avançados.

Using Docker Inspection like a Boss

Assista a este vídeo, 'Using Docker Inspection like a Boss', para ver como o comando inspect é usado na prática. Preste atenção especial em como a flag -f e os templates Go são usados para extrair informações específicas.

Assista ao vídeo inteiro. Os pontos principais são: a introdução (até 0:27), a análise do JSON bruto (até 2:58), a filtragem com -f para obter valores específicos (até 7:02), e o uso de laços range para extrair dados de listas, como endereços IP (até o final).

Extraindo Informações Específicas

Como demonstrado no vídeo, a sintaxe básica do template usa {{.FieldName}} para acessar campos no JSON. Para campos aninhados, você usa a notação de ponto, como {{.Config.Image}}.

Vamos ver alguns exemplos práticos que você pode testar com o seu contêiner meu-banco-pg.

1. Obter o endereço IP do contêiner:
Os detalhes da rede ficam em NetworkSettings. O caminho exato pode variar dependendo da rede, mas uma abordagem robusta é iterar sobre as redes disponíveis.

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' meu-banco-pg

Este comando usa range para percorrer o mapa de redes e imprime o IPAddress de cada uma. Na configuração padrão, você verá o IP do contêiner na rede bridge.

2. Verificar as variáveis de ambiente:
Você pode listar todas as variáveis de ambiente para confirmar sua configuração.

docker inspect --format='{{.Config.Env}}' meu-banco-pg

A saída será um array Go. Para formatá-lo de forma mais legível, com uma variável por linha, podemos usar range novamente:

docker inspect --format='{{range .Config.Env}}{{.}}{{"\n"}}{{end}}' meu-banco-pg

3. Encontrar o caminho do log do contêiner:
Isso é extremamente útil para depuração quando você precisa acessar os arquivos de log diretamente no host.

docker inspect --format='{{.LogPath}}' meu-banco-pg

O artigo a seguir e a documentação oficial do Docker fornecem mais detalhes e exemplos que você pode usar como referência.

Docker Inspect Explained: A Step-by-Step Guide

Este guia da Kosli, 'Docker Inspect Explained', oferece uma excelente visão geral por escrito, complementando o vídeo com exemplos claros sobre o uso de templates Go, incluindo condicionais e iteração sobre mapeamentos de portas.

Leia as seções 'Docker Inspect Syntax', 'Options', e 'Examples'. O foco principal está nos exemplos, que mostram como construir queries com a flag --format para extrair diferentes tipos de dados.

Teste seu entendimento!

Usando o contêiner meu-banco-pg que está em execução, escreva um único comando docker inspect para extrair o nome da imagem da qual o contêiner foi criado (por exemplo, postgres).

Show answer

A informação da imagem está localizada dentro do objeto Config. O comando seria:

docker inspect --format='{{.Config.Image}}' meu-banco-pg

Isso deve retornar postgres ou postgres:latest.


Inspecionando Mais do que Apenas Contêineres

Embora nosso foco seja em contêineres, é importante saber que o docker inspect é uma ferramenta versátil que funciona com outros objetos Docker. Você pode inspecionar:

  • Imagens: docker inspect postgres:latest
  • Volumes: docker inspect <nome_do_volume>
  • Redes: docker inspect bridge

Isso permite que você obtenha uma visão holística de todo o seu ambiente Docker. Se houver ambiguidade de nomes (por exemplo, um contêiner e um volume com o mesmo nome), você pode usar a flag --type para especificar o objeto.

docker inspect --type=image postgres:latest

A documentação oficial do Docker (LINK) é o melhor lugar para consultar a lista completa de opções e exemplos "receita de bolo" para extrair informações comuns. Recomendo mantê-la como referência para consultas futuras.


Conclusão

Nesta lição, você adicionou uma ferramenta de diagnóstico essencial ao seu kit de ferramentas Docker. Agora você pode ir além de apenas executar contêineres e começar a investigar seu funcionamento interno de forma precisa e programática.

Principais pontos a reter:

  • docker inspect fornece uma visão completa e detalhada da configuração e do estado de qualquer objeto Docker em formato JSON.
  • O output JSON bruto, embora completo, é muitas vezes verboso demais para uma análise rápida.
  • A flag --format é a chave para extrair informações específicas, usando a sintaxe de templates da linguagem Go para consultar o JSON.
  • Casos de uso comuns incluem verificar o endereço IP, variáveis de ambiente, mapeamentos de porta, e caminhos de log, tornando-o indispensável para depuração.

Até agora, vimos o estado estático e a configuração de um contêiner. Na próxima lição, vamos mudar nosso foco para o desempenho dinâmico. Exploraremos o comando docker stats, que permite monitorar o uso de recursos de seus contêineres (CPU, memória, rede) em tempo real.