针对Docker容器的Nginx反向代理

我有一个反向代理到我的Docker服务的问题。 我有一个IP 10.0.0.163的本地机器,并运行与它的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" 

在浏览器中input10.0.0.163:9000/时,一切正常。 问题是什么? 我怎样才能使这个url工作

 10.0.0.163/portainer/... -> 10.0.0.163:9000/... 

尝试改变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-compose.yml DNS服务器

也。 另一种方式。 你可以使用jwilder / nginx-proxy而不是你的反向代理。