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

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

新規登録して質問してみよう
ただいま回答率
85.48%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2527閲覧

コンテナ上にuvicornを建て、ブラウザから接続したい。

shunhamm

総合スコア22

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/12 07:36

前提・実現したいこと

コンテナ上に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

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

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

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

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

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

yamap55

2022/03/14 01:16

> 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 っと記載されている通り、「api/schemas/task.py」でエラーが出ていますのでこのファイルの内容を記載ください。
shunhamm

2022/03/14 03:59

ご指摘ありがとうございます。こちらのファイルを確認し、構文を間違えているところ発見し修正したところエラーが解消され、サーバーにもアクセスできるようになりました。ありがとうございます。かなり初歩的な所を見落としていたのでお恥ずかしいです。。。
guest

回答1

0

自己解決

shema定義ファイル内で構文エラーが発生していたのでこれを修正し、解決。

投稿2022/03/14 04:00

shunhamm

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問