2015-07-10 80 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