有多种选择可以实现这一目标。最简洁的方法是告诉 JVM 使用系统代理并将代理定义为 Docker 容器的环境变量。所有选项如下所述。
选项1:直接在Java中设置代理
您可以使用System.setProperty(String, String) 直接在代码中定义代理:
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");
请注意,代理是硬编码的。此解决方案仅在代理对所有环境(本地开发、服务器/云上的部署)保持相同的情况下才有效。
选项 2:调用 JVM 时指定代理
您可以在调用 VM 时将代理设置为命令行参数。您不需要在代码中进行额外配置。
java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 YourApplication
如果您设置了环境变量,您也可以在此处使用它们。这样代理设置可以根据环境动态变化。
选项 3:使用系统代理
第三个选项是告诉 JVM 使用已配置的系统代理(您可以按照下面的说明进行操作)。这再次通过设置命令行参数来实现。
java -Djava.net.useSystemProxies=true YourApplication
设置系统代理
要为 Docker 设置系统代理,您还有两个选择。
选项a:使用环境变量
您可以直接在 Dockerfile 中使用环境变量:
ENV HTTP_PROXY "http://proxy.example.com:8080"
或者您可以在docker run 命令中指定环境变量:
docker run --env HTTP_PROXY="http://proxy.example.com:8080" your-container
选项 b:配置 Docker 客户端
在 Docker 客户端上,创建或编辑文件~/.docker/config.json 并设置代理:
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy.example.com:8080"
}
}
}
此选项仅配置您的本地客户端,您需要相应地配置其他环境。