【问题标题】:Nginx reverse proxy for Docker containersDocker 容器的 Nginx 反向代理
【发布时间】:2018-03-20 08:52:10
【问题描述】:

我的 Docker 服务的反向代理有问题。我有一台 IP 为 10.0.0.163 的本地机器,并在其上运行 Docker 堆栈,使用 nginx 和 portainer(对于这个问题,只有它们很重要)。

docker-compose.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.conf:

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;
    }
  }
}

反向代理镜像的 Dockerfile:

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/...

【问题讨论】:

    标签: docker nginx proxy docker-compose reverse-proxy


    【解决方案1】:

    问题和我一样。

    我在下面解决,

    # 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
    

    打开浏览器>>https://domain-name.dev/portainer

    阅读更多:https://portainer.readthedocs.io/en/stable/faq.html

    为我工作。 ^____^

    【讨论】:

      【解决方案2】:

      尝试更改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 是嵌入式 docker DNS 服务器

      还有。替代方式。您可以使用jwilder/nginx-proxy 代替您的反向代理。

      【讨论】:

      • 你能帮我解决我提到的一件事吗:10.0.0.163/portainer/... -> 10.0.0.163:9000/... 将配置更改为location /portainer 似乎不起作用
      • hmm,试着把proxy pass改成http://portainer:9000/最后别忘了/。这个guy 说它必须有效
      • 非常感谢这终于解决了问题
      猜你喜欢
      • 2021-05-04
      • 2017-03-21
      • 2020-09-10
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2017-11-13
      相关资源
      最近更新 更多