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.

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 inspectfornece 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.