如果使用代理连接,则无法连接到其他容器



大家好,让我来谈谈Docker..所以我有更多的Docker容器,我成功地将容器连接到具有相同网络的每个容器…但如果我设置代理连接,它使我的容器不能连接到其他容器…伙计们,我该怎么做?

这是我的docker-compose。yml文件
version: '3.7'
services:
membership:
container_name: membership_service
build:
context: ./membership
target: dev
ports:
- 6010:6010
volumes:
- ./membership:/app
network_mode: simas_net
proxy:
container_name: nginx_proxy
build:
context: ./proxy
target: dev
ports:
- 8000:80
volumes:
- ./proxy/config:/etc/nginx/conf.d
network_mode: simas_net

,这里是代理配置

~/.docker/config.json
{
"proxies": {
"default": {
"httpProxy": "http://192.168.49.1:8000/",
"httpsProxy": "http://192.168.49.1:8000/",
"noProxy": "localhost,127.0.0.0/8"
}
}
}

谢谢你们的帮助

这不是什么大问题。您的~/.docker/config.json配置为在启动容器时自动设置三个代理环境变量。

  • http_proxy
  • https_proxy
  • no_proxy

现在容器内的软件似乎对这些变量做出反应(这是预期的,您通常配置这些设置,以使容器使用代理)

在你的情况下,然而,似乎你的服务器软件挑选这些设置,并自动尝试通过代理连接到其他容器主机名->失败的原因是代理不在容器网络中,因此他不能帮助建立连接。

多种解决方案:

  • 配置无法连接的系统以避免代理/直接连接。您可能希望将其限制为:
    • 当前无法连接的服务(容器名)
    • 手动添加no_proxy值与其他容器名称->希望软件能正确解读(no_proxy未标准化)
  • 删除一般代理配置,并显式地为需要此代理进行通信的服务在撰写文件中设置环境变量(http_proxy,https_proxy,no_proxy)
  • 将目标服务的容器名称添加到noProxy配置中-不推荐->如果容器不会在你的设置中改变,那么每次你遇到这个问题时都需要重新启动daemon。

我更改了没有代理选项的grpc客户端拨号。事实证明,关于grpc客户端不能连接到rpc服务器,但rpc服务器可以相互连接,所以我添加了没有代理的rpc客户端拨号连接,这是工作

grpc.Dial(target, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithNoProxy())

最新更新