1
0

初めてのdocker &Streamlit & FastAPIで詰まった話  (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))

Last updated at Posted at 2023-11-29

備忘録なので一部省略しています。同じエラーになった方がいれば参考にしてください。

ぶつかった問題

FastAPI,Streamlit,Dockerを使ってwebアプリを作成していました。

出来上がったのでターミナルで

docker compose up -d 

を実行してwebページのURLを見にいくと以下のエラーが

ConnectionError: HTTPConnectionPool(host='backend', port=8080): Max retries exceeded with url: /select_genre (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xffff5a656dd0>: Failed to establish a new connection: [Errno 111] Connection refused'))

今回は初めての連続だったため何が原因か分からず12時間解決に費やした。
結果ChatGPTに手を変え品を変え質問して、解決

ChatGPTによる解決方法のご教授

あなたのDocker Composeファイルを確認しましたが、基本的にはバックエンド(backendサービス)がポート8080で、フロントエンド(frontendサービス)がポート8501で公開されているようです。depends_onセクションも使用されており、frontendサービスはbackendサービスが起動してから起動するように指定されています。

これらの設定が正しくある場合、以下の手順で問題を解決できる可能性があります:

  1. サービスを再起動:
    Docker Composeファイルを変更した場合や問題が発生している場合、サービスを再起動してみてください。

    docker-compose down
    docker-compose up --build
    

    これにより、古いコンテナが停止し、新しいコンテナがビルドされて実行されます。

  2. ネットワークの確認:
    Docker Composeで作成されるデフォルトのネットワークに対して問題がある場合、ネットワークを再作成してみてください。

    docker-compose down
    docker-compose up --build --force-recreate
    
  3. フロントエンドのリクエスト先の修正:
    フロントエンドのコードで、バックエンドに対するリクエストのホスト名を backend ではなく、バックエンドのコンテナが公開されているIPアドレスや localhost に変更してみてください。

    response = requests.post("http://localhost:8080/select_genre", json={"selected_genre": selected_genre})
    
  4. ホストマシンのポートの解放:
    他に何かがポート8080を使用していないか確認してください。他のアプリケーションが同じポートを使用している場合、ポートの解放が必要です。

これらの手順で問題が解決しない場合は、具体的なエラーメッセージや挙動がわかると、より具体的なアドバイスが可能です。それでも解決できない場合、Docker関連の問題やネットワーク設定の問題が考えられます。

結果

私の場合、サービスの再起動とネットワークの再作成でなんとかなりました。
今回はGitHub,Docker,Frontend,Backend全て初めての弱々機械学習エンジニの私が詰まった部分についてまとめさせていただきました。

次の被害者が出ないことを願います。
許すまじ [Errno 111]

PS

ただエラー文をChatGPTに投げると、Uvicornの起動コマンドを確認して!とかCompose の中身を確認して、などしか言ってくれませんでした。その辺りのミスがない場合はご紹介した方法を試してください。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0