備忘録なので一部省略しています。同じエラーになった方がいれば参考にしてください。
ぶつかった問題
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
サービスが起動してから起動するように指定されています。
これらの設定が正しくある場合、以下の手順で問題を解決できる可能性があります:
-
サービスを再起動:
Docker Composeファイルを変更した場合や問題が発生している場合、サービスを再起動してみてください。docker-compose down docker-compose up --build
これにより、古いコンテナが停止し、新しいコンテナがビルドされて実行されます。
-
ネットワークの確認:
Docker Composeで作成されるデフォルトのネットワークに対して問題がある場合、ネットワークを再作成してみてください。docker-compose down docker-compose up --build --force-recreate
-
フロントエンドのリクエスト先の修正:
フロントエンドのコードで、バックエンドに対するリクエストのホスト名をbackend
ではなく、バックエンドのコンテナが公開されているIPアドレスやlocalhost
に変更してみてください。response = requests.post("http://localhost:8080/select_genre", json={"selected_genre": selected_genre})
-
ホストマシンのポートの解放:
他に何かがポート8080を使用していないか確認してください。他のアプリケーションが同じポートを使用している場合、ポートの解放が必要です。
これらの手順で問題が解決しない場合は、具体的なエラーメッセージや挙動がわかると、より具体的なアドバイスが可能です。それでも解決できない場合、Docker関連の問題やネットワーク設定の問題が考えられます。
結果
私の場合、サービスの再起動とネットワークの再作成でなんとかなりました。
今回はGitHub,Docker,Frontend,Backend全て初めての弱々機械学習エンジニの私が詰まった部分についてまとめさせていただきました。
次の被害者が出ないことを願います。
許すまじ [Errno 111]
PS
ただエラー文をChatGPTに投げると、Uvicornの起動コマンドを確認して!とかCompose の中身を確認して、などしか言ってくれませんでした。その辺りのミスがない場合はご紹介した方法を試してください。