2017-02-26 14 views
2

私のアプリケーションが動作している別のコンテナにコンテナ内のnginxリバースプロキシを設定しようとしています。ここに私のnginx.confは次のとおりです。Docker nginxリバースプロキシが502の不正なゲートウェイを返します。 "上流への接続中に接続が拒否されました"

daemon off; 

    user nginx; 
    worker_processes 1; 

    error_log /var/log/nginx/error.log warn; 
    pid  /var/run/nginx.pid; 


    events { 
     worker_connections 1024; 
    } 


    http { 
     include  /etc/nginx/mime.types; 
     default_type application/octet-stream; 

     log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
         '$status $body_bytes_sent "$http_referer" ' 
         '"$http_user_agent" "$http_x_forwarded_for"'; 

     access_log /var/log/nginx/access.log main; 

     sendfile  on; 

     upstream appserver { 
      server app:3000; 
     } 

     server { 
      listen 80; 
      server_name localhost; 

      location/{ 
       proxy_pass http://appserver/; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Host $http_host; 
       proxy_redirect off;   
      } 
     } 
    } 

マイドッキングウィンドウ-compose.ymlは、次のようになります。

version: '3' 
services: 
    db: 
    image: postgres 
    redis: 
    image: redis 
    web: 
    build: ./web 
    image: web 
    ports: 
     - "8080:80" 
    app: 
    build: ./app 
    image: app 
    command: puma 
    volumes: 
     - ./app:/app 
    expose: 
     - "3000" 
    ports: 
     - "3000:3000" 
    depends_on: 
     - db 
     - redis 
     - web 

Dockerfileリバースプロキシのため、単純にコピーする設定ファイルとnginxのサービスを開始します。ここに問題があります:

ホストのブラウザでlocalhost:8080にアクセスすると、nginxは502 Bad Gatewayを返します。ログは、 "web_1 | 2017/02/26 22:55:15 [エラー] 12#12:*アップストリームのクライアントに接続中にconnect()が失敗しました(111:Connection refused):172.25.0.1、server:localhost、リクエスト: "GET/HTTP/1.1"、上流: "http://127.0.53.53:3000/"、ホスト: "localhost:8080" web_1 | 172.25.0.1 - [26/Feb/2017:22:55:15 +0000] "GET/HTTP /1.1 "502 576" - "Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(GeckoのようなKHTML)Chrome/56.0.2924.87 Safari/537.36" " - " "

すぐにすぐに私はnginxが私のアプリケーションコンテナにアクセスすることはできませんが、 "ウェブ"コンテナ内の "カールアプリ:3000"を実行すると、適切な応答を返すと思っています。また、ポートが転送されると、ポート3000でアプリに直接アクセスすることもできます。だから私は、そのリソースにアクセスしようとしている方法について、自分のnginx.confに問題があるように感じています。私はしばらくの間、この壁に頭を叩いていました。何か案は?

+0

"上流:" http://127.0.53.53:3000/ ""がログからのそのエラーメッセージのどこから来るのかわかりません。 nslookupは172.25.0の 'app'のための適切なIPを返します。* – adam

+0

あなたの 'web'コンテナはあなたの' app'コンテナではなく、 'depends_on'ではないでしょうか?起動時にエラーが表示される場合があります。 – jkinkead

+0

@jkinkeadは本当に問題でした。周囲の人たちにそれを直してもらいました。ありがとう。 – adam

答えて

0

docker-compose.ymlを書き換えると、アプリケーションがnginxリバースプロキシよりも前に起動されるようになり、問題が解決されます。

version: '3' 
services: 
    db: 
    image: postgres 
    redis: 
    image: redis 
    web: 
    build: ./web 
    image: web 
    ports: 
     - "8080:80" 
    depends_on: 
     - app 
    app: 
    build: ./app 
    image: app 
    command: puma 
    volumes: 
     - ./app:/app 
    expose: 
     - "3000" 
    ports: 
     - "3000:3000" 
    depends_on: 
     - db 
     - redis 
関連する問題