Dockerで requirements.txt が反映されない原因と解決方法|pip install -r が効かない場合
① 結論
Dockerで pip install -r requirements.txt を実行しているのに、
コンテナ内でライブラリが import できない原因の多くは、
「Dockerイメージのキャッシュ」「COPYの順序ミス」「ビルドと実行の環境ズレ」です。
特に多いのは Dockerのレイヤーキャッシュが効いて requirements.txt が再インストールされていないケースです。
まずは docker build --no-cache で再ビルドしてください。
② 症状
- requirements.txt を更新したのにコンテナ内に反映されない
- docker build は成功するが import で ModuleNotFoundError が出る
- ローカルでは動くのに Docker 内だけ失敗する
- requirements.txt を修正しても挙動が変わらない
③ 原因(原因+詳細)
原因1:Dockerのレイヤーキャッシュが効いている
【詳細】
- なぜ起きるか
DockerはDockerfileの各行をレイヤーとしてキャッシュします。
requirements.txt に変更があっても、COPYの順番や構成によっては
pip install のレイヤーが再実行されません。 - 起きやすい条件
COPY . . を先に書いている/requirements.txt のみを個別COPYしていない - 判断ポイント
docker build .
docker history イメージ名
pip install のレイヤーが「CACHED」と表示される場合、再実行されていません。
原因2:Dockerfile内のCOPY順序が不適切
【詳細】
- なぜ起きるか
以下のようなDockerfileはキャッシュが効きやすく、
requirements.txt更新が反映されません。
COPY . .
RUN pip install -r requirements.txt
正しくは以下の順序です。
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
これにより、requirements.txt変更時のみpip installが再実行されます。
原因3:ビルドしたイメージと実行コンテナがズレている
【詳細】
- なぜ起きるか
docker build を実行しても、古いコンテナを docker run している場合、
新しいイメージが使われません。 - 起きやすい条件
docker-compose 使用時/タグを付け直していない - 判断ポイント
docker images
docker ps -a
実行中のコンテナが最新イメージIDと一致しているか確認します。
④ 切り分け手順
docker build --no-cache .で再ビルドdocker imagesで最新イメージ確認docker run -it イメージ名 /bin/bash- コンテナ内で
pip list実行
⑤ 解決方法
方法1:キャッシュを無効化してビルド
docker build --no-cache -t app:latest .
方法2:Dockerfileを修正
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
方法3:古いコンテナを削除
docker rm -f コンテナ名
docker run -it app:latest
⑥ 再発防止
- requirements.txt は必ず個別COPYする
- pip installはDockerfile内で固定する
- ビルド時にタグを明示する
- 本番用と開発用Dockerfileを分ける
⑦ それでもダメな場合
importエラーが出る場合は、
コンテナ内で実行しているPythonとpipの紐づけがズレている可能性があります。
以下の記事も参考にしてください。

コメント