2015-07-10 113 views
7

失败,我有以下docker-compose.ymlNGINX反向代理与链接Docker容器

node1: 
    build: ./node 
    links: 
     - redis 
    ports: 
     - "8080" 
node2: 
    build: ./node 
    links: 
     - redis 
    ports: 
     - "8080" 
service1: 
    build: ./service 
    links: 
     - redis 
    ports: 
     - "8383" 
redis: 
    image: redis 
    ports: 
     - "6379" 
nginx: 
    build: ./nginx 
    links: 
     - node1:node1 
     - node2:node2 
     - service1:service1 
    ports: 
     - "80:80" 

执行该运行docker ps我得到以下后:

080d9d7dc2e0  dockerworkflow_nginx:latest  "nginx -g 'daemon of 5 minutes ago  Up 5 minutes  0.0.0.0:80->80/tcp, 443/tcp dockerworkflow_nginx_1 
8c25bfdb9d00  dockerworkflow_node1:latest  "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33023->8080/tcp  dockerworkflow_node1_1 
4ae817be2a63  dockerworkflow_service1:latest "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33022->8383/tcp  dockerworkflow_service1_1 
91ff238fe3f6  dockerworkflow_node2:latest  "nodemon /src/index. 6 minutes ago  Up 6 minutes  0.0.0.0:33021->8080/tcp  dockerworkflow_node2_1 
fe0c7e02c860  redis:latest      "/entrypoint.sh redi 6 minutes ago  Up 6 minutes  0.0.0.0:33020->6379/tcp  dockerworkflow_redis_1 

一切都显得好为止。

nginx.conf我使用如下所示:

worker_processes 4; 
events { worker_connections 1024; } 

http {  
    server { 
      listen 80; 

      location/{ 
      proxy_pass http://node1; 
      } 

      location /a/ { 
      proxy_pass http://node2; 
      } 

      location /b/ { 
      proxy_pass http://service1; 
      } 
    } 
} 

这一切真的应该做的是以下几点:

如果我进入http://{host-ip}/那么node1容器转发请求。

如果我输入http://{host-ip}/a/那么node2容器被转发请求。

如果我输入http://{host-ip}/b/那么service1容器被转发请求。

现在,我得到502 Bad Gateway,如果我尝试任何东西。

回答

6

我能想出的解决方案,它被证明是愚蠢的东西是没有任何记录显示,是我很难遇到。

以下是更新后的nginx.conf文件。

worker_processes 4; 
events { worker_connections 1024; } 

http {  

    upstream node_app { 
     server node1:8080; 
    } 

    upstream service_app { 
     server service1:8383; 
    } 

     server { 
       listen 80; 

      location/{ 
       proxy_pass http://node_app/; 
       include /etc/nginx/proxy_params; 
      } 

      location /a/ { 
       proxy_pass http://node_app/; 
       include /etc/nginx/proxy_params; 
      } 

      location /b/ { 
       proxy_pass http://service_app/; 
       include /etc/nginx/proxy_params; 
      } 
     } 
} 

不知道,如果包括必要在这一点上,但在proxy_pass指令结束后/似乎在这一天结束时做的伎俩。

+0

出于好奇,上游{}块是否做了任何事情来解决您的问题?还是只是有一个尾随/修复它? – csgeek

+0

对我来说没有喜乐。你的proxy_params文件中有什么? – Adam

-2

我想你应该指定每个proxy_pass内的端口。

worker_processes 4; 
events { worker_connections 1024; } 

http {  
    server { 
      listen 80; 

      location/{ 
      proxy_pass http://node1:8080; 
      } 

      location /a/ { 
      proxy_pass http://node2:8080; 
      } 

      location /b/ { 
      proxy_pass http://service1:8383; 
      } 
    } 
} 
+0

这没有奏效, – TheJediCowboy

+0

@TheJediCowboy有没有错误日志?也许你可以尝试将你的服务端口暴露给你的主机,并测试Web应用程序是否工作。 – Freeznet

+0

没有错误。我可以在内部打端点,所以我知道该应用程序的作品。 – TheJediCowboy