当我去构建docker nginx 与 dockers envoy的时候遇见一个问题就是
connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.25.1, server: jx.qscode.com, request: "GET /api/search/searchCarousel HTTP/1.1", upstream: "http://127.0.0.1:6788/api/search/searchCarousel", host: "jx.qscode.com"
我的意愿是将nginx代理在次代理的envoy中代理在转发到我grpc服务上
nginx.conf:
server {
listen 80;
server_name jx.qscode.com;
root /root/SciViceFunding/front/;
location /api/ {
proxy_http_version 1.1;
proxy_pass http://jxenvoy:6788; #根据给定的envoy端口更改
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}
nginx启动脚本:
docker run --name jxnginx -d -p 80:80 --link=jxenvoy:jxenvoy -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/conf.d:/etc/nginx/conf.d -v /root/nginx/logs:/var/log/nginx -d docker.io/nginx
envoy启动脚本:
docker run -d -v /root/JxEnvoy:/etc/myenvoy -p 6789:6789 -p 6788:6788 --name JxService envoyproxy/envoy-alpine /user/local/bin/envoy -c etc/myenvoy/grpc-json-envoy.yaml -l debug
启动之后访问地址就发现nginx报502,我起初以为是我的配置有问题,后来仔细想了一下可能是容器内访问容器外的的网址可能是存在问题的,当然由于当时我不知道容期间通信不设置会存在问题所以当时的想法表述的可能不是非常专业。后来我查阅了一下资料发现原来容期间通信不特殊配置真的会出现问题,之后我又看了这篇微博https://blog.csdn.net/tanzhang78/article/details/78628924
恍然大悟,原来一个容器要想访问另外一个容器时需要配置 --link= 指令:
例如我写的脚本 --link=jxenvoy:jxenvoy 解释为 --link=[想要访问的容器的名字]:[给想要访问的容器起的别名(用于当前容器内部调用)]
如此一来就解决了。