makoxti
@makoxti

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

FastAPIでサーバーを立ち上げてもSwaggerが表示されない

解決したいこと

Dockerを起動してhttp://8000/docsにアクセスしたらSwaggerが表示されてほしいです。
今は「このページは動作していません」と表示されます。

発生している問題・エラー

発生しているエラーは特になし
docker起動時のログを載せておきます。

~/workspace/next_python/fastapi/nextfastpostgress : docker-compose up
Starting frontend ... done
Starting db       ... done
Starting backend  ... done
Attaching to db, frontend, backend
db        | 
db        | PostgreSQL Database directory appears to contain a database; Skipping initialization
db        | 
db        | 2022-05-21 03:16:42.391 UTC [1] LOG:  starting PostgreSQL 13.1 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 10.2.1_pre1) 10.2.1 20201203, 64-bit
db        | 2022-05-21 03:16:42.391 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db        | 2022-05-21 03:16:42.391 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db        | 2022-05-21 03:16:42.397 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db        | 2022-05-21 03:16:42.403 UTC [22] LOG:  database system was shut down at 2022-05-21 03:13:38 UTC
db        | 2022-05-21 03:16:42.407 UTC [1] LOG:  database system is ready to accept connections
frontend  | yarn run v1.22.5
frontend  | warning ../package.json: No license field
frontend  | $ next dev
frontend  | ready - started server on 0.0.0.0:3000, url: http://localhost:3000
backend   | INFO:     Will watch for changes in these directories: ['/backend']
backend   | INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
backend   | INFO:     Started reloader process [1] using statreload
backend   | INFO:     Started server process [8]
backend   | INFO:     Waiting for application startup.
backend   | INFO:     Application startup complete.
frontend  | wait  - compiling...
frontend  | event - compiled client and server successfully in 1916 ms (119 modules)

git

よろしくお願いいたします。

0

1Answer

docker-compose.ymlの22行目を

- command: uvicorn code.main:app --reload
+ command: uvicorn code.main:app --host 0.0.0.0 --reload

としてみてください

uvicornは、--host オプションでHTTPリクエストを受け付ける送信元IPを制限することができます
このhostを指定しなかった場合のデフォルト値は 127.0.0.1 となっており、サーバーが起動しているホスト(=apiコンテナ)から見たローカルホスト(=apiコンテナ)からのリクエストしか受け付けません
つまり、現在の設定では、apiコンテナ内から発信したHTTPリクエストしか受け付けない設定になっています

今回のケースでは、ホストマシン上で動作するブラウザからapiコンテナへHTTPリクエストを送信しようとしているため、hostの値にホストマシンのIPが含まれるように設定してあげる必要があります
上記修正案については、0.0.0.0は「すべてのIPアドレス」を意味する表現で、簡単のため実質送信元IPのチェックを行わない設定としています

1Like

Comments

  1. @makoxti

    Questioner

    解決しました!
    ありがとうございます!
  2. @makoxti

    Questioner

    解決しました!
    ありがとうございます!

Your answer might help someone💌