Docker Composeでの「Found orphan containers」警告の解決方法

beginner🐳 Docker2026-07-24| Docker Engine(全バージョン)、Docker Compose V1またはV2、Linux、macOS、またはWindows。

Error Message

Found orphan containers (service_name) for this project. If on purpose, can safely ignore.
#docker-compose#devops#トラブルシューティング

5秒でできる解決策

警告をすぐに消したいですか?スタックを起動する際に --remove-orphans フラグを追加するだけです。これにより、YAMLファイルで定義されなくなったコンテナを削除するようDockerに指示できます。

docker compose up -d --remove-orphans

新しいサービスを起動せずに整理したい場合は、同じフラグを指定して down コマンドを実行します:

docker compose down --remove-orphans

なぜDockerは警告を出すのか?

Docker Composeは「プロジェクト名」を使用して、作成したすべてのコンテナを追跡します。この警告は、docker-compose.yml に記載されていないものの、プロジェクトに属しているコンテナをDockerが見つけたときに発生します。アイドル状態の Alpine ベースのコンテナでも 5MB〜10MB の RAM を消費し、忘れ去られたデータベースなら理由もなく 200MB 以上のメモリを占有し続ける可能性があります。

多くの開発者が以下の3つのシナリオでこの問題に直面します:

  • サービスの名称変更: db:postgres-db: に変更した場合。古い db コンテナはシステム内で「ゴースト」として残ります。
  • スタックの削減: マネージドサービスや別のツールに移行したために、redismailhog などのサービスを削除した場合。
  • Gitブランチの切り替え: 6つのサービスで構成される複雑な機能ブランチから、2つのサービスしか使用しない main ブランチに戻った場合。残りの4つのコンテナは孤立した状態(orphan)になります。

問題を解決する3つの方法

方法1:標準フラグ(日常的な使用に最適)

通常、これらのコンテナは削除したいはずです。これらは docker ps の出力を乱雑にし、時には 80805432 などのポートを占有して新しいサービスの開始を妨げることがあります。up コマンドにフラグを追加するのが最も効率的なワークフローです。

# 一括でクリーンアップして起動
docker compose up -d --remove-orphans

内部的には、Dockerは不正なコンテナのIDを特定し、現在の設定を進める前にそれらに対して docker rm -f を実行します。

方法2:削除前に調査する

保存されていないデータが含まれている可能性がある場合は、すぐにコンテナを削除しないでください。警告に Found orphan containers (legacy_api_service) と表示されている場合は、まず中身を確認しましょう。

# 孤立したコンテナがまだ実行中か確認
docker ps -a --filter "name=legacy_api_service"

# 重要な処理を行っていなかったかログを確認
docker logs legacy_api_service

# 確認が取れたら手動で削除
docker rm -f legacy_api_service

この手動のアプローチは、サービスの定義を誤って削除してしまい、コンテナのエフェメラルレイヤーに保存されていたデータベースのバックアップを取り忘れた場合などに非常に役立ちます。

方法3:プロジェクト名の競合を修正する

デフォルトでは、Dockerはフォルダ名をプロジェクト名として使用します。もし /app という名前の異なる2つのプロジェクトが別々のフォルダにある場合、Dockerはそれらのコンテナを混同してしまいます。その結果、全く別のプロジェクトのコンテナを「クリーンアップ」しようとする可能性があります。

これを解決するには、.env ファイルで一意のプロジェクト名を設定します:

# .env ファイル
COMPOSE_PROJECT_NAME=ecommerce_v2_staging

あるいは、CLIコマンドで -p フラグを使用して、環境を分離した状態に保ちます:

docker compose -p unique_project_name up -d --remove-orphans

クリーンアップの確認

修正を実行した後、環境を確認してください。docker compose ps を実行してリストが整理されているか確認します。出力は docker-compose.yml の内容と正確に一致するはずです。再度 up を実行した際、あの煩わしい黄色の警告テキストが消えていれば成功です。

プロのヒント:エイリアスを使用する

毎回長いコマンドを入力するのが面倒な場合は、.zshrc.bashrc にエイリアスを追加しましょう。私はデフォルトで作業環境をクリーンに保つためにこれを使用しています:

alias dcup='docker compose up -d --remove-orphans'

隠れたデータに関する注意

コンテナを削除しても、そのボリュームは自動的には削除されません。孤立したサービスが永続ストレージ用に名前付きボリューム(named volume)を使用していた場合、そのデータは依然として NVMe や SSD の容量を占有しています。未使用のボリュームによってどれだけのスペースが失われているかを確認するには、次を実行します:

docker system df

接続されていないボリュームを一括削除したい場合は、docker volume prune を使用します。ただし、このコマンドは破壊的であり、現在アクティブなコンテナに接続されていないすべてのボリュームを削除するため、注意して実行してください。

Related Error Notes