大家好,让我来谈谈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())