我正在编写一个与Big Query API交互的Java应用程序,该应用程序还将在docker容器中运行。我需要为我的应用程序设置http和https的帮助。我不确定仅为docker容器指定环境变量是否足够,还是仅需要在Java代码中设置代理,还是两者都需要,我该如何做。
预先感谢
有多种选择可以实现。最干净的方法是告诉JVM使用系统代理,并将代理定义为Docker容器的环境变量。所有选项如下所述。
您可以使用System.setProperty(String, String)
在代码中直接定义代理:
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");
请注意,代理是硬编码的。仅当代理对于所有环境(本地开发,服务器/云上的部署)保持相同时,此解决方案才有效。
调用虚拟机时,可以将代理设置为命令行参数。您不需要在代码中进行其他配置。
java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 YourApplication
如果已设置环境变量,也可以在此处使用环境变量。这样,代理设置可以根据环境动态更改。
第三个选项是告诉JVM使用已配置的系统代理(您可以按照以下说明进行操作)。再次通过设置命令行参数来实现。
java -Djava.net.useSystemProxies=true YourApplication
要为Docker设置系统代理,您再次有两个选择。
您可以直接在Dockerfile中使用环境变量:
ENV HTTP_PROXY "http://proxy.example.com:8080"
或者您可以在docker run
命令中指定环境变量:
docker run --env HTTP_PROXY="http://proxy.example.com:8080" your-container
在Docker客户端上,创建或编辑文件~/.docker/config.json
并设置代理:
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy.example.com:8080"
}
}
}
此选项仅配置您的本地客户端,您需要相应地配置其他环境。