Uso da imagem curl para chamadas entre containers | Artigo | Docker
- Uso da imagem curl para chamadas entre containers | Artigo | Docker
Visão geral
Em ambientes containerizados, é comum trabalhar com imagens minimalistas que não possuem ferramentas como curl instaladas. Isso dificulta testes de conectividade, debugging e validação de endpoints internos.
Uma abordagem prática é utilizar uma imagem dedicada com curl para executar requisições dentro da mesma rede Docker, sem precisar alterar ou rebuildar o container alvo.
Imagem recomendada
Uma das imagens mais utilizadas é:
curlimages/curl
Essa imagem é leve e já vem com o curl pronto para uso.
Executando requisição em outro container
Cenário
- Container alvo:
api - Porta exposta internamente:
8080 - Ambos na mesma rede Docker:
minha_rede
Comando
docker run --rm \
--network minha_rede \
curlimages/curl \
http://api:8080/health
Explicação
--rm→ remove o container após execução--network→ conecta na mesma rede do container alvocurlimages/curl→ imagem utilizadahttp://api:8080→ usa o nome do container como hostname (DNS interno do Docker)
Testando endpoints com headers
docker run --rm \
--network minha_rede \
curlimages/curl \
-H "Authorization: Bearer TOKEN_AQUI" \
http://api:8080/secure-endpoint
Executando métodos diferentes
POST
docker run --rm \
--network minha_rede \
curlimages/curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"nome":"teste"}' \
http://api:8080/users
PUT
docker run --rm \
--network minha_rede \
curlimages/curl \
-X PUT \
-d '{"status":"ativo"}' \
http://api:8080/users/1
Uso em Docker Compose
Se os containers estiverem em um docker-compose, normalmente já compartilham a mesma rede. Basta usar o nome do serviço:
docker run --rm \
--network nome_do_projeto_default \
curlimages/curl \
http://api:8080
Para descobrir a rede:
docker network ls
Debug avançado
Verificar DNS interno
docker run --rm \
--network minha_rede \
curlimages/curl \
http://api:8080
Se falhar, pode indicar:
- Container não está na mesma rede
- Nome do serviço incorreto
- Porta incorreta
Testar conectividade TCP (fallback)
docker run --rm \
--network minha_rede \
curlimages/curl \
telnet api 8080
Alternativa com shell interativo
Para múltiplos testes:
docker run -it --rm \
--network minha_rede \
curlimages/curl sh
Depois:
curl http://api:8080
Observações
- Não é necessário instalar nada no container alvo
- Funciona apenas se houver conectividade de rede entre os containers
- O nome do container/serviço funciona como hostname via DNS interno do Docker
- Ideal para debugging rápido em produção ou ambientes restritos