es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La aplicación en Java y Docker no puede acceder a la API externa.

Tengo un problema al conectarme a una API externa desde una aplicación Java construida con Spring Boot y Feign.
La aplicación está implementada en una máquina virtual en un contenedor de Docker.
Estoy intentando acceder a un punto final de servicio externo para recobrar algunos datos, pero hasta ahora no he tenido éxito.

He ejecutado el mismo comando con curl tanto desde la línea de comandos de la máquina virtual, como desde dentro del contenedor de Docker, también desde la línea de comandos, pero cuando intento usarlo desde el código Java, solo recibo un tiempo de espera.

¿Alguna idea de qué puede estar pasando? Aparentemente, el archivo hosts y el proxy están correctos, dado que puedo acceder al punto final a través de curl, así que supongo que está faltando algo en el código en sí o en la configuración para Java.

El siguiente es el código que está configurado:

@GetMapping(value = "${url}", headers = {
            "X-API-Key=${apiKey}",
            "Authorization=${authorization}",
            "Accept=application/json",
            "Content-Type=application/json; charset=utf-8"
    })
    CheckResponse checkEmail(@RequestParam("email") String email) throws FeignClientException;

A continuación, se muestra la solicitud curl que funciona desde Docker y la máquina virtual:

curl --location --request GET 'https://${url}/emailcheck-e?email=test@email.com' --header 'X-API-Key: ${apiKey}' --header 'Content-Type: application/json; charset=utf-8' --header 'Accept: application/json' --header 'Authorization: ${Authorization}'
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Posibles razones para el problema de tiempo de espera al conectar con una API externa desde una aplicación Java construida con Spring Boot y Feign dentro de un contenedor Docker podrían ser:

    1. Problemas de firewall o red: La VM o el contenedor Docker podrían tener reglas de firewall o restricciones de red que impiden que el tráfico saliente llegue al punto final de la API. Se recomienda verificar la conectividad de red del contenedor Docker y la VM mediante el uso del comando “ping” hacia el punto final de la API y verificar el tiempo de respuesta.
    2. Problemas de resolución DNS: La aplicación Java podría no ser capaz de resolver el nombre DNS del punto final de la API hacia su dirección IP debido a configuraciones incorrectas de DNS en el contenedor Docker o la VM. Se recomienda verificar la configuración DNS ejecutando el comando “nslookup” desde dentro del contenedor Docker o la VM.

    3. Problemas de configuración de proxy: La aplicación Java podría requerir un servidor proxy para conectarse al punto final de la API, y es posible que la configuración del proxy no esté correctamente configurada en el contenedor Docker o la VM. Se recomienda verificar la configuración del proxy ejecutando el comando “curl” con la configuración del proxy desde dentro del contenedor Docker o la VM.

    4. Problemas con el certificado SSL/TLS: El punto final de la API podría estar utilizando cifrado SSL/TLS, y es posible que el certificado SSL/TLS no sea confiable para la aplicación Java que se ejecuta dentro del contenedor Docker o la VM. Se recomienda verificar el certificado SSL/TLS ejecutando el comando “curl” con la opción “-k” para ignorar errores SSL/TLS.

    Para solucionar el problema, se recomienda habilitar el modo de depuración (debug) en la aplicación Spring Boot estableciendo el nivel de registro en “debug” para el registrador “org.springframework.web.client.RestTemplate”, y verificar los registros en busca de mensajes de error o excepciones relacionadas con el cliente Feign. También se recomienda verificar las cabeceras de solicitud y respuesta enviadas por la aplicación Java al punto final de la API capturando el tráfico de red mediante herramientas como Wireshark o tcpdump.

Comments are closed.