前提・実現したいこと
コンテナ上にuvicornを建て、ブラウザから接続したい。
docker-compose upでサーバーを建て、アクセスした所以下のエラーメッセージが返されました。
発生している問題・エラーメッセージ
該当のソースコード
dockerfile
1# python3.9のイメージをダウンロード 2FROM python:3.9-buster 3ENV PYTHONUNBUFFERED=1 4 5WORKDIR /src 6 7# pipを使ってpoetryをインストール 8RUN pip install poetry 9 10# poetryの定義ファイルをコピー (存在する場合) 11COPY pyproject.toml* poetry.lock* ./ 12 13# poetryでライブラリをインストール (pyproject.tomlが既にある場合) 14RUN poetry config virtualenvs.in-project true 15RUN if [ -f pyproject.toml ]; then poetry install; fi 16 17# uvicornのサーバーを立ち上げる 18ENTRYPOINT ["poetry", "run", "uvicorn", "api.main:app", "--host", "0.0.0.0", "--reload"]
docker
1version: '3' 2services: 3 demo-app: 4 build: . 5 volumes: 6 - .dockervenv:/src/.venv 7 - .:/src 8 ports: 9 - 8000:8000 # ホストマシンのポート8000を、docker内のポート8000に接続する 10 11 db: 12 image: mysql:8.0 13 platform: linux/x86_64 # M1 Macの場合必要 14 environment: 15 MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' # rootアカウントをパスワードなしで作成 16 MYSQL_DATABASE: 'demo' # 初期データベースとしてdemoを設定 17 TZ: 'Asia/Tokyo' # タイムゾーンを日本時間に設定 18 volumes: 19 - mysql_data:/var/lib/mysql 20 command: --default-authentication-plugin=mysql_native_password # MySQL8.0ではデフォルトが"caching_sha2_password"で、ドライバが非対応のため変更 21 ports: 22 - 33306:3306 # ホストマシンのポート33306を、docker内のポート3306に接続する 23volumes: 24 mysql_data:
試したこと
- ホストマシンからcurlコマンドでアクセスしてみる。(念のためローカルホストにも)
% curl http://localhost:8000 curl: (52) Empty reply from server % curl http://0.0.0.0:8000 curl: (52) Empty reply from server
- コンテナ内からアクセスしてみる。
root@dcc6e28899e7:/src# curl http://localhost:8000/ curl: (7) Failed to connect to localhost port 8000: Connection refused root@dcc6e28899e7:/src# curl http://0.0.0.0:8000/ curl: (7) Failed to connect to 0.0.0.0 port 8000: Connection refused
補足情報
compose upしたときのstatus
docker-compose up [+] Running 2/0 ⠿ Container zenn_todo-demo-app-1 Created 0.0s ⠿ Container zenn_todo-db-1 Created 0.0s Attaching to zenn_todo-db-1, zenn_todo-demo-app-1 zenn_todo-db-1 | 2022-03-12 16:09:58+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. zenn_todo-db-1 | 2022-03-12 16:09:58+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' zenn_todo-db-1 | 2022-03-12 16:09:58+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.28-1debian10 started. zenn_todo-db-1 | 2022-03-12T07:09:59.256979Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. zenn_todo-db-1 | 2022-03-12T07:09:59.257022Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.28) starting as process 1 zenn_todo-db-1 | 2022-03-12T07:09:59.265319Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. zenn_todo-db-1 | 2022-03-12T07:09:59.414832Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. zenn_todo-db-1 | 2022-03-12T07:09:59.639071Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. zenn_todo-db-1 | 2022-03-12T07:09:59.639219Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. zenn_todo-db-1 | 2022-03-12T07:09:59.641019Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. zenn_todo-db-1 | 2022-03-12T07:09:59.673832Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock zenn_todo-db-1 | 2022-03-12T07:09:59.674169Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.28' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL. zenn_todo-demo-app-1 | INFO: Will watch for changes in these directories: ['/src'] zenn_todo-demo-app-1 | INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) zenn_todo-demo-app-1 | INFO: Started reloader process [1] using watchgod zenn_todo-demo-app-1 | Process SpawnProcess-1: zenn_todo-demo-app-1 | Traceback (most recent call last): zenn_todo-demo-app-1 | File "/usr/local/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap zenn_todo-demo-app-1 | self.run() zenn_todo-demo-app-1 | File "/usr/local/lib/python3.9/multiprocessing/process.py", line 108, in run zenn_todo-demo-app-1 | self._target(*self._args, **self._kwargs) zenn_todo-demo-app-1 | File "/src/.venv/lib/python3.9/site-packages/uvicorn/subprocess.py", line 76, in subprocess_started zenn_todo-demo-app-1 | target(sockets=sockets) zenn_todo-demo-app-1 | File "/src/.venv/lib/python3.9/site-packages/uvicorn/server.py", line 60, in run zenn_todo-demo-app-1 | return asyncio.run(self.serve(sockets=sockets)) zenn_todo-demo-app-1 | File "/usr/local/lib/python3.9/asyncio/runners.py", line 44, in run zenn_todo-demo-app-1 | return loop.run_until_complete(main) zenn_todo-demo-app-1 | File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete zenn_todo-demo-app-1 | File "/src/.venv/lib/python3.9/site-packages/uvicorn/server.py", line 67, in serve zenn_todo-demo-app-1 | config.load() zenn_todo-demo-app-1 | File "/src/.venv/lib/python3.9/site-packages/uvicorn/config.py", line 458, in load zenn_todo-demo-app-1 | self.loaded_app = import_from_string(self.app) zenn_todo-demo-app-1 | File "/src/.venv/lib/python3.9/site-packages/uvicorn/importer.py", line 21, in import_from_string zenn_todo-demo-app-1 | module = importlib.import_module(module_str) zenn_todo-demo-app-1 | File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module zenn_todo-demo-app-1 | return _bootstrap._gcd_import(name[level:], package, level) zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap>", line 1030, in _gcd_import zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap>", line 1007, in _find_and_load zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap>", line 680, in _load_unlocked zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap_external>", line 850, in exec_module zenn_todo-demo-app-1 | File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed zenn_todo-demo-app-1 | File "/src/./api/main.py", line 3, in <module> zenn_todo-demo-app-1 | from api.routers import task, done zenn_todo-demo-app-1 | File "/src/./api/routers/task.py", line 6, in <module> zenn_todo-demo-app-1 | import api.cruds.task as task_crud zenn_todo-demo-app-1 | File "/src/./api/cruds/task.py", line 4, in <module> zenn_todo-demo-app-1 | import api.schemas.task as task_schema zenn_todo-demo-app-1 | File "/src/./api/schemas/task.py", line 6, in <module> zenn_todo-demo-app-1 | class TaskBase(BaseModel): zenn_todo-demo-app-1 | File "/src/./api/schemas/task.py", line 7, in TaskBase zenn_todo-demo-app-1 | title = Optional[str] = Field(None, example="Pick up clothese") zenn_todo-demo-app-1 | TypeError: '_SpecialForm' object does not support item assignment

回答1件
あなたの回答
tips
プレビュー