2016-12-02 1 views
2

私が実行している2個のコンテナがあります。するdockerized WebページからのAPIコールバックエンドサーバーは、ネットで終わり作り:: ERR_CONNECTION_REFUSED

  • フロントエンドnginxのベースのアプリ/コンテナ(Webページで開かれたがブラウザー)は、 "/ search"エンドポイントでAPIコールを試行します。ウェブページは静的であり、ウェブページのコンテンツを/usr/share/nginx/htmlにコピーすることで利用できます。
  • この要求はバックエンドによって処理されるように、私は/searchためのGET要求を行うことができないのはなぜポート8080

で提供されてバックエンドサーバー?

リンクしている場合でも、常にブラウザのコンソールにnet::ERR_CONNECTION_REFUSEDが表示されます。ここで

は私の設定です:

services: 
    backend: 
     image: docker.xxxxx.net/yyyyyy/zzzzzzzz:latest 
     expose: 
     - "8080" 
     ports: 
     - "8333:8080" 

    frontend: 
     build: 
     dockerfile: Dockerfile 
     context: . 
     depends_on: 
     - "backend" 
     links: 
     - backend 
     ports: 
     - "80:80" 
     volumes: 
     - ./build:/usr/share/nginx/html 

重要な注意別のサーバー上だけでバックエンドを起動すると、(その後に生じる唯一の問題はCORSである)私は、API呼び出しを行うことができますので、バックエンドのコードがOKであること問題は不正なドッカーの設定でなければなりません。

私ははっきりとフロントエンドを開くことができますが、私は任意のAPI呼び出しを行うことはできません。

  • http://backend/search?q=test
  • http://backend:8080/search?q=test
  • http://backend:8333/search?q=test
  • :私は物事の多くはへの呼び出しをしたいとしようとしました
  • http://frontend/search?q=test
  • http://frontend:8080/search?q=test
  • http://frontend:8333/search?q=test

結果は同じです。何が間違っていますか?

答えて

0

ドッカーが提供する環境変数を使用してソースドッカーに連絡してください。 this

0

nginxでCORSエラーを処理してください。

あなたのnginx.confにリバースプロキシを設定します。

server { 
    listen 80 default_server; 
    server_name _; 

     location /search { 
     proxy_pass http://backend:8080; 
    } 
... 
} 

この(または類似の)あなたのネット:: ERR_CONNECTION_REFUSED許可エラーが

+0

これは試しましたが、運がないわけではありません。私もCORSを無効にするクロムエクステンションをインストールしようとしました - 結果は同じです。 – kaytrance

+0

@kaytrance最新の設定を取得するには、ドッカーのコンテナ内でnginxを再起動しましたか? nginx -s reload ORサービスを再試行してください。 – Gabbax0r

+0

もちろん、私はdocker-compose -f configfile.yml upですべてのドッカーセットアップを停止して再起動しました。ところで、CORS関連の問題(この設定に関係ない)があったとき、ブラウザのコンソールにCORSについてのエラーが表示されましたが、今は違うので、私の問題はCORS関連ではないと仮定します – kaytrance

1

を解決する必要があり、私はホストからではないフロントエンドのコンテナから、すなわち、GET要求は、ブラウザから作られていると仮定しています。あなたの設定に従って、8080はバックエンドコンテナからフロントエンドコンテナに公開され、ポート8333はドッカーホストに公開されます。したがって、http://backend:8080はフロントエンドコンテナ内からのみ表示できますが、ホストマシンからは表示されません。したがって、バックエンドコンテナからの応答を取得するには、http://<docker_ip>:8333/search?q=testにする必要があります。

+0

*/search *を呼び出すと 'http:// /search'に変換されますので、基本的にはに電話しています。私も呼び出しに8333のポートを追加しようとしましたが、私は 'このサイトには到達できません。 'を取得します – kaytrance

+0

私は間違っているかもしれませんが... .... http:// localhost:8333/search?q = test 。あなたの環境はUNIXかUnixでないのですか?非UNIXの場合は、ネイティブドッカーやドッカーマシンを使用していますか? – Yuva

+0

Localhostはまた、「このサイトには到達できません。私は窓の下にあり、端末から私の設定を起動する – kaytrance

関連する問題