質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

1925閲覧

dockerコンテナ上のflaskへの接続

3u1

総合スコア11

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2022/06/22 06:11

react,flask,niginx,msqlのコンテナを作成したプリケーションを作っています
開発環境では以下いずれともブラウザからアクセス可能なのですが
localhost:3000/
http://localhost/

本番環境の場合、port:3000は受け付けないので以下でブラウザアクセスします。
http://ipaddress/

フロント(react)については当たり前ですがブラウザからちゃんと表示されているのですが
以下エラーとなりflaskとの接続ができません。

localhost:5000/api/user_get:1 Failed to load resource: net::ERR_CONNECTION_REFUSED

コンテナが上がっているサーバー上にてcurlコマンドでAPIを呼び出すと以下のどちらも形式も応答します
curl localhost:5000/api/user_get
curl ipaccress:5000/api/user_get

おそらく初歩的な部分の知識不足と思いますが、本番環境でflaskとの接続をするにはどのあたりを見るべきでしょうか

念のため以下のymlとnginxのコンフィグを張ります

dockercompose.yml

1 2services: 3 flask_app: 4 build: 5 context: ./flask 6 container_name: flask 7 ports: 8 - "5000:5000" 9 networks: 10 - frontend 11 - backend 12 volumes: 13 - ./flask:/var/www/flask 14 tty: true 15 environment: 16 TZ: Asia/Tokyo 17 command: flask run --host 0.0.0.0 --port 5000 18 19 react_app: 20 build: 21 context: ./front 22 container_name: react 23 volumes: 24 - ./front/:/usr/src/app 25 environment: 26 CHOKIDAR_USEPOLLING: "true" 27 command: sh -c "cd react-app && yarn install && yarn dev" 28 ports: 29 - "3000:3000" 30 networks: 31 - frontend 32 tty: true 33 stdin_open: true 34 35 nginx: 36 build: 37 context: ./nginx 38 container_name: nginx 39 ports: 40 - "80:80" 41 volumes: 42 - ./front/react-app/dist:/var/www 43 - ./nginx/:/etc/nginx/conf.d/ 44 depends_on: 45 - react_app 46 networks: 47 - frontend 48networks: 49 frontend: 50 driver: bridge 51 backend: 52 driver: bridge 53

nginx.conf

1server { 2 listen 80; 3 4 location / { 5 root /var/www; 6 index index.html index.htm; 7 try_files $uri /index.html; 8 } 9 10 error_page 500 502 503 504 /50x.html; 11 location = /50x.html { 12 root /usr/share/nginx/html; 13 } 14 15 location /api { 16 proxy_pass http://flask:5000; 17 } 18} 19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

自己解決しました
Axiosの接続先のポートが:5000で行っていたためでした
ポートを80にすることで接続できました。
ありがとうございます

投稿2022/06/23 08:05

3u1

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このページが分かり安いと思います。

真ん中あたりに以下の記述がありますが、3u1さんはflaskというサービスを定義していないように見えます。
この辺考慮に入れて直したらいけるかもしれません。

text

1各コンテナ間の通信はサービス名で行われる 2そのため、nginxからweb1コンテナへのアクセスは「http://web1:5001/」となる

ところで、よくわからないのですが、react_appは何をしているのでしょうか?
nginxのボリュームマウントに- ./front/react-app/dist:/var/wwwとあり、nginxは他のコンテナに接続する必要無く、Front側のHTMLを返している様に見えるのですが、想定通りでしょうか?

flaskの各ページのUI側をreactにして、リソース取得をfetchとかで取得するように作っていると思いますが、この構成だとどういうアクセスをしようとしているのかがよくわかりませんでした。
この辺解決しないと一番上のを解決できたとしても上手く動かないかもしれません。

また、本件とは関係ありませんがflaskの実行をflask run --host 0.0.0.0 --port 5000としてやろうとしているように見えます。
flask runで実行されるのは開発サーバであり、本番環境での使用はNGです。
Apacheのmod_wsgiとか、NginxのuWSGIとか、gunicornとかを使って起動し、Webサーバ(ApacheやらNginxやらIISやら)を通してやりとりする形に直した方が安全と思います。

投稿2022/06/22 06:54

FiroProchainezo

総合スコア2443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

3u1

2022/06/22 07:46

おっしゃるとおりなのですが、コンテナ名で転送できております サービス名:flask_app コンテナ名:flask >ところで、よくわからないのですが、react_appは何をしているのでしょうか? >nginxのボリュームマウントに- ./front/react-app/dist:/var/wwwとあり、nginxは他のコンテナに接続する必要無く、Front側のHTMLを返している様に見えるのですが、想定通りでしょうか? ご指摘のとおりFront側のHTMLを返しているだけです。 reactからリソース取得はaixosをつかってflaskのAPIを呼び出しております >flask runで実行されるのは開発サーバであり、本番環境での使用はNGです。 社内システムのため、そこまで考慮が至っておりませんでした。 そのあたりの連携は別途調べてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問