はじめに
こちらの記事は「Docker&仮想サーバー(2022年初版)」という書籍で学習中に発生したエラーと解決方法についてまとめています。
環境
Mac
VsCodeを利用
Docker Desktopを利用
書籍のDLコンテンツからサンプルプログラムを利用
「Chapter4-11:Flaskコンテナを構築する」でエラー発生
compose.yaml
のコード
# compose.yamlファイル
services:
web: # コンテナ名
build: . # 「.」よりカレントフォルダにあるDockerfileを使ってイメージが作成される
environment:
FLASK_ENV: development # 環境変数。Flaskでプログラムを即時反映させる為
ports:
- "5000:5000" # ポート番号。Flaskのデフォルトポート番号
volumes:
- ./src:/usr/src/app # ボリューム
エラー発生までの流れ
対象パスchap4/flask
に移動後
docker compose up -d
を実行。
ここがうまくいかなかった。止まってしまう。
✅% docker compose logs web
で確認
こちらのコマンドの意味は下記になります。
docker-compose.yml
に定義されている web サービス(Flask アプリなど) の ログを表示する
⚠️ImportError: cannot import name 'url_quote' from 'werkzeug.urls'
Flask 2.3 系では、内部的に werkzeug.urls.url_quote を使っているのに、それが 新しい Werkzeug では削除されてしまったため、Flask が壊れている状態。
だそうです。
以下記事も参考にさせていただきました。ありがとうございます
✅解決
Dockerfile
でダウングレード
RUN pip install flask==2.2.5 werkzeug==2.2.3
この後ターミナルで以下コマンドを実行
# イメージがまだ古いまま使われている可能性が高いので以下手順で再度実行
docker compose down --rmi all --volumes --remove-orphans # 完全に古いイメージ削除
docker compose build --no-cache # 再ビルド強制的に
docker compose up -d # コンテナ起動
docker compose logs web # 一応ログ確認
おまけ:ログ確認のコマンド実行の際、正常に動作している場合の出力結果
web | * Serving Flask app 'app.py' # Flask が app.py を実行している
web | * Debug mode: on # デバッグモード有効(コード変更が即反映)
web | WARNING: This is a development server. Do not use it in a production deployment.
web | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) # このURLでアプリが起動中(アクセスOK)
web | * Restarting with stat
web | * Debugger is active! # デバッガが動いている(エラー調査に便利)
web | * Debugger PIN: 123-456-789
さらについでに、もしこの後ブラウザにアクセスしたり、フォーム送信をしたりすると、その履歴がログに追加されます
web | 127.0.0.1 - - [06/Jul/2025 16:21:01] "GET / HTTP/1.1" 200 -