Docker: proxy_pass to another container - nginx: host not found in upstream

前端 未结 4 872
我在风中等你
我在风中等你 2021-01-12 04:18

(I know others have asked this question before, but I\'m not able to solve the problem using the solutions proposed in other posts, so i figured i would try to post my c

相关标签:
4条回答
  • 2021-01-12 04:35

    It's simple. Just change the old configuration:

    upstream docker-web {
        server web:8000;
    }
    

    To this new one:

    upstream docker-web {
        server web:80;
    }
    

    The reason is, between containers can't communicate with published port. It just can communicate with the target port. 8000:80 (8000 is published port and 80 is target port).

    Let say you have 8000:443, you must create the configuration with "server web:443" inside Nginx listen to 443 port number. May this help.

    0 讨论(0)
  • 2021-01-12 04:45

    Well you could achieve that by editing your /etc/hosts file and add the proper entry for your web host

    1.1.1.1 web
    

    Obviouslly you'll have to replace 1.1.1.1 with the web server's real ip address (a private one I suppose). Save the file and try again. Another workaround would be to replace in the config:

    upstream docker-web {
        server web:8000;
    }
    

    with

    upstream docker-web {
        server web-ip-address:8000;
    }
    

    If you'll go for the 2nd, don't forget to restart/reload nginx!

    0 讨论(0)
  • 2021-01-12 04:50

    I figured out how to fix the problem. Got some help to fix the docker-compose.yml, so it looks like this:

    docker-compose-yml:

    version: "3"
    services:
      web:
        image: user/repo:web
        deploy:
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
          restart_policy:
            condition: on-failure
        ports:
          - "8000:80"
        networks:
            main:
                aliases:
                    - web
    
    
      nginx:
        image: user/repo:nginx
        ports:
          - 80:80
        links:
          - web:web
        depends_on:
          - web
        networks:
            main:
                aliases:
                    - nginx
    networks:
      main:
    

    After this the nginx container actually ran, but it was still not capable of connecting to the web-container. Found out I was able to use both curl web and curl web -p 8000 to get the page from web, from inside the nginx container. Then I changed the upstream in my nginx.conf from this

    upstream docker-web {
        server web:8000;
    }
    

    to this:

    upstream docker-web {
        server web;
    }
    
    0 讨论(0)
  • 2021-01-12 04:59

    Hello your problem is with the port when you linked web:web you need to specify the port in which the container runs the service for exemple

        ports:
      - "8000:80"
    

    means inside the container i can access on port 80 but in the host machine i can acess via 8000. here's the doc about linking two services in docker-compose

    so if you want to access web in proxy nginx don't use 8000 but use :

    upstream docker-web {
    server web:80;
      }
    

    instead, this should work :)

    or (those are both the same)

     upstream docker-web {
        server web;
          }
    
    0 讨论(0)
提交回复
热议问题