如何代理HTTP请求从容器到一个特定的地址(:端口)在docker?



我目前正在创建一个工具来管理docker容器。
所以我正在寻找一种方法来连接到一个api服务器在局域网内的容器。
有几个api服务器运行在不同的主机上。
api服务器在启动时不在80端口上,而是在一个随机端口上。
要使用api,您需要在Authorization头中指定令牌。
但是,在这种情况下,不可能在容器中包含令牌。
要从容器内使用api,我想将192.168.0.2:49152路由到api.example.com:80

我已经做了以下的事情。

docker run -it 
--add-host=api.example.com:192.168.0.2 
image:version main.sh

我们认为不可能在上面的命令上附加端口或Token,所以我们做了以下操作:

docker run -it 
--add-host=api.example.com:192.168.0.10 
--env HTTP_PROXY="http://host.docker.internel:49513" 
image:version main.sh

正如您在上面看到的,我想在工具上附加一个代理服务器。
代理服务器监听49513等端口
代理服务器自带授权,并将请求转发给容器中的api

这个实现的问题是它代理了所有HTTP通信。
如果所有的HTTP通信都是代理的,那么通信将会有延迟,需要实时性能。
由于该工具管理大量容器,因此这个问题被认为是关键的。
在docker的Proxy中有NO_PROXY,但是没有像YES_PROXY这样的代理白名单,这与此相反。

我正在考虑扩展上面的实现。如果你有什么好主意,请告诉我。

我正在使用翻译,所以如果你有任何问题,请评论,我会尽我所能回答他们。如果你有任何问题或意见,请给我留言。

谢谢。

您可以将代理服务器配置为透明http代理服务器

假设代理服务器IP为192.168.0.20,API服务器IP为192.168.0.10

docker run -it 
--add-host=api.example.com:192.168.0.20 
image:version main.sh

使用nginx配置代理服务器

server {
listen  80;
server_name api.example.com;
location / {
proxy_pass http://192.168.0.10:xxx;
proxy_set_header Host $host;
}
}

这样,只有对api.example.com的请求才会被发送到代理服务器。

最新更新