从使用Spring boot和false构建的Java应用程序连接到外部API时出现问题。应用程序被部署到docker容器中的VM。到目前为止,我正试图访问一个外部服务端点来检索一些数据,但没有成功。
我已经从VM命令行和docker容器内部以及命令行使用curl执行了相同的命令,但当我试图从java代码中调用它时,我只收到了一个超时。
任何关于可能发生的事情的想法,显然主机文件和代理都是正确的,因为我可以通过curl到达端点,所以我想我在代码本身或java的设置中遗漏了一些东西。
@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;
从docker和VM工作的curl请求。
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}'
我认为问题可能出在从vm到外部API的连接上。当您启动DockerContainer时,您可以使用-p
参数指定从vm映射到本地机器的端口。有关详细信息,您可能需要查看文档:https://docs.docker.com/engine/reference/commandline/port/
我们通过将代理服务器配置添加到外部配置中来修复它。显然,即使当代理被设置为为为VM&docker容器java代码明确需要它。