Dockerの「Container Name Already in Use」競合エラーの解決方法

beginner🐳 Docker2026-04-19| Docker Engine (全バージョン), Docker Desktop on macOS, Windows (WSL2), または Linux (Ubuntu, CentOS, Debian).

Error Message

docker: Error response from daemon: Conflict. The container name "/my-app" is already in use by container "a3f9b2c1d4e5". You have to remove (or rename) that container to be able to reuse that name.
#docker#devops#トラブルシューティング#コンテナ

なぜこの競合が発生するのかDockerは名前付けに関して厳格です。--nameフラグを使用すると、その特定の名前はホスト上の固有の識別子になります。web-serverという名前の新しいコンテナを起動しようとした際、停止しているものも含め、すでにその名前を使用しているコンテナが存在する場合、Dockerはブレーキをかけます。

このエラーは通常、ローカル開発中に発生します。以前のインスタンスがクラッシュしたか、あるいは新しいバージョンを立ち上げる前にコンテナを停止し忘れた可能性があります。コンテナがアクティブに実行されていなくても、明示的に削除されるまでは、Dockerのメタデータ内でその名前を「所有」し続けます。

docker: Error response from daemon: Conflict. The container name "/my-app" is already in use by container "a3f9b2c1d4e5". You have to remove (or rename) that container to be able to reuse that name.

ゴーストコンテナを見つけるエラーメッセージには、原因となっているコンテナのID(a3f9b2c1d4e5)が記載されています。最初のステップは、このコンテナの状態を確認することです。通常のdocker psコマンドは実行中のコンテナのみを表示することに注意してください。すべてを表示するには、-aフラグが必要です。

競合を特定するために、次のコマンドを実行します:

docker ps -a | grep my-app

コンテナが「Exited(終了)」状態であることを示す結果が表示されるはずです:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
a3f9b2c1d4e5   nginx     "/docker-entrypoint.…"   15 minutes ago   Exited (0) 5 minutes ago             my-app

名前の競合を解決する方法### 1. 最も手っ取り早い解決策:停止して削除古いコンテナが不要な場合は、削除してしまいましょう。まだ実行中の場合は、まず停止させる必要があります。「force(強制)」フラグを使用すれば、両方を一瞬で行うことも可能です。

2ステップで行う方法:

docker stop my-app
docker rm my-app

1行で行う方法(強制削除):

docker rm -f my-app

古いコンテナがなくなれば、元のdocker runコマンドが正常に動作するようになります。

2. 「後で使うために保存」する解決策:リネーム古いコンテナにログや特定の状態が残っており、失いたくない場合があります。その場合は削除する代わりに、名前を変更して退避させましょう。これはデプロイ失敗のデバッグ時に非常に役立つ習慣です。

docker rename my-app my-app-broken-v1

これにより、データを検査用に保持したまま、my-appという名前を即座に解放できます。

3. 自動化による解決策:--rm フラグの使用手動でのクリーンアップに飽きましたか?データベースのマイグレーションや単発のテストなど、一時的なタスクを実行する場合は、コマンドに--rmフラグを追加してください。これにより、コンテナが停止した瞬間に自動的に削除されるようになります。

docker run --rm --name my-app my-image:latest

これは、残されたコンテナが次のビルドサイクルを妨げる可能性がある CI/CD パイプラインにおいて非常に有用です。

Docker Compose での問題解決docker-compose upの使用中にこのエラーが発生する場合、通常はローカル環境と Compose の内部状態が同期されていないことを意味します。これは、YAML ファイルの外で同じ名前のコンテナを手動で作成した場合などに起こります。

Compose にすべてを最初から再作成させます:

docker-compose up -d --force-recreate

それでも解決しない場合は、環境を完全に削除してやり直してください:

docker-compose down

結果の再確認コンテナリストを名前でフィルタリングして、修正を確認します。競合が解消されていれば、出力は空になるか、新しいコンテナ ID が表示されます。

docker ps -a --filter "name=my-app"

名前エラーを避けるためのベストプラクティス- 停止したコンテナもカウントされる: 停止したコンテナは駐車中の車のようなもので、依然としてスペースを占有します。定期的に docker system prune を実行して、古いリソースをクリーンアップしましょう。- 名前にプレフィックスを付ける: 共有環境では、他のプロジェクトとの衝突を防ぐために、dev-prod- などのプレフィックス(例:dev-api-server)を使用してください。- Compose に任せる: 絶対に必要な場合を除き、docker-compose.ymlcontainer_name をハードコーディングするのは避けましょう。Docker Compose は人間よりもユニークな名前の管理に長けています。

Related Error Notes