curl: (7) Failed to connect to localhost port 8090

2019-02-22 02:17发布

问题:

Need help. Have been trying for a solution to this issue and could not see an answer or rather I have not come across any.

I have a docker container with NGINX, acting as a reverse proxy. Docker for Windows version 1.12.5(9503).

upstream mysite {
    server 127.0.0.1:8090;
    #server localhost:8090; (have also tried this option)
}

server {
    listen 0.0.0.0:80;
    server_name  localhost;

    location / {
        proxy_pass http://mysite;
    }
}

In the above code localhost:8090 is a url of a website that is hosted on IIS on my host machine. When I access the url on NGINX, I get the following error

2016/12/27 08:11:57 [error] 6#6: *4 no live upstreams while connecting to upstream, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://googlesite/", host: "localhost"
172.17.0.1 - - [27/Dec/2016:08:11:57 +0000] "GET / HTTP/1.1" 502 173 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0" "-"

Tried to access the url on the host machine

(simple HTML site, single page with only simple html, hosted on IIS with anonymous access granted to all.)

curl localhost:8090

Getting the following error:

curl: (7) Failed to connect to localhost port 8090: Connection refused

Am new to Docker and NGINX. Would like to know if it is possible to access urls on the host machine? If Yes, then where am I wrong.

The same configuration works, if I use google.co.in instead of 127.0.0.1:8090.

Thanks.

回答1:

Inside a docker container the localhost and 127.0.0.1 refer to the container itself. In order to access the host machine running dockerd with your container you must refer to the host by its public hostname/IP as if it was another machine on the network.