Skip to main content

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 alvo
  • curlimages/curl → imagem utilizada
  • http://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