代码之家  ›  专栏  ›  技术社区  ›  Igor Nehoroshev

用于Docker容器的Nginx反向代理

  •  6
  • Igor Nehoroshev  · 技术社区  · 8 年前

    我对Docker服务的反向代理有问题。我有一台IP为10.0.0.163的本地机器,上面运行着带有nginx和portainer的Docker stack(对于这个问题,只有它们才重要)。

    docker撰写。yml:

    ...
     portainer:
        image: portainer/portainer
        ports:
          - "9000:9000"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
          - "/mnt/StorageDrive/Portainer:/data"
        deploy:
          placement:
            constraints: [node.role == manager]
        networks:
          ...
          - proxy
    
     reverse-proxy:
        image: reverseproxy:latest
        ports:
          - "80:80"
        networks:
          - proxy
    
    networks:
      ...
      proxy:
    

    nginx。形态:

    worker_processes  1;  ## Default: 1
    
    events { worker_connections  1024; }
    
    http {
    
      sendfile     on;
    
      server {
        listen 80;
        allow all;
    
        location / {
          proxy_pass      http://10.0.0.163:9000;
        }
      }
    }
    

    FROM nginx:alpine
    
    COPY nginx.conf /etc/nginx/nginx.conf
    

    当尝试访问10.0.0.163时,我得到错误502,来自reverseproxy的日志显示:

    2017/10/09 07:43:02 [error] 5#5: *1 connect() failed (113: Host is unreachable) while connecting to upstream, client: 10.255.0.2, server: , request: "GET / HTTP/1.1", upstream: "http://10.0.0.163:9000/", host: "10.0.0.163"
    10.255.0.2 - - [09/Oct/2017:07:43:02 +0000] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
    

    在浏览器中键入10.0.0.163:9000/时,一切正常。问题是什么?我如何使用这个URL

    10.0.0.163/portainer/... -> 10.0.0.163:9000/...
    
    2 回复  |  直到 8 年前
        1
  •  6
  •   Bukharov Sergey    8 年前

    尝试更改nginx配置

      server {
        listen 80;
        allow all;
    
        location / {
          proxy_pass      http://portainer:9000/;
          resolver        127.0.0.11;
        }
      }
    

    portainer 容器名称是否定义在 docker-compose.yml 127.0.0.11

    而且替代方式。您可以使用 jwilder/nginx-proxy 而不是你的反向代理。

        2
  •  1
  •   bamossza    6 年前

    我也有同样的问题。

    我决定如下:,

    # Docker run command
    docker run --name portainer --network devops-net -d -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
    
    # Nginx
    location /portainer/ {
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      proxy_pass http://portainer:9000/;
    }
    
    location /portainer/api/websocket/ {
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_http_version 1.1;
      proxy_pass http://portainer:9000/api/websocket/;
    }
    
    # Notice
    Portainer default port 9000
    

    Open brower>&燃气轮机; https://domain-name.dev/portainer

    enter image description here

    https://portainer.readthedocs.io/en/stable/faq.html

    为我工作^____^