「The container name is already in use」エラーとは?
Dockerでコンテナを起動しようとしたとき、次のようなエラーが表示されて困ったことはありませんか?
docker: Error response from daemon: Conflict. The container name "/web" is already in use by container "abc123def456...". You have to remove (or rename) that container to be able to reuse that name.
このエラーは、同じ名前のコンテナがすでに存在しているときに発生します。Docker初心者がつまずきやすいポイントですが、原因と対処法を理解すれば簡単に解決できます。
この記事では、コンテナ名の重複エラーが起きる原因と、4つの解決パターンをわかりやすく解説します。
なぜこのエラーが起きるのか
Dockerでは、--name オプションで指定するコンテナ名は一意(ユニーク)でなければなりません。同じ名前のコンテナがすでに存在していると、新しいコンテナを同じ名前で作成できずにエラーとなります。
よくあるケースは次の2つです。
ケース1: 停止済みコンテナが残っている
最も多いパターンです。以前 docker run --name web nginx で起動したコンテナを docker stop で停止しても、コンテナ自体は削除されずに残っています。停止状態のコンテナが残ったまま、同じ名前で docker run を実行するとこのエラーが発生します。
# 1回目: 正常に起動
docker run --name web -d nginx
# コンテナを停止(削除はされない)
docker stop web
# 2回目: エラーになる!
docker run --name web -d nginx
# → "The container name is already in use"
ケース2: 同名のコンテナがすでに動いている
同じ名前のコンテナが起動中の場合も、当然ながらエラーになります。別のターミナルで起動していたことを忘れている、というケースがよくあります。
まずは、現在のコンテナの状態を確認しましょう。
# 起動中のコンテナを確認
docker ps
# 停止中を含むすべてのコンテナを確認
docker ps -a
docker ps -a を実行すると、STATUSが「Exited」のコンテナも表示されます。ここに同じ名前のコンテナが見つかれば、それがエラーの原因です。
解決方法を4パターン紹介
状況に応じて、最適な方法を選んでください。
| 方法 | コマンド例 | おすすめの場面 |
|---|---|---|
| 既存コンテナを削除 | docker rm web |
不要なコンテナを片付けたいとき |
| 既存コンテナを再起動 | docker start web |
前回のデータをそのまま使いたいとき |
| 別名で起動 | docker run --name web2 ... |
両方のコンテナが必要なとき |
| 使い捨てコンテナにする | docker run --rm ... |
一時的なテスト・検証のとき |
方法1: docker rm で既存コンテナを削除する
もう使わないコンテナであれば、docker rm で削除してから再度 docker run しましょう。最もシンプルな解決方法です。
# 停止済みコンテナを削除
docker rm web
# 起動中の場合は先に停止してから削除
docker stop web
docker rm web
# または -f オプションで強制削除(起動中でもOK)
docker rm -f web
# 削除後に改めて起動
docker run --name web -d nginx
⚠️ 注意 docker rm -f は起動中のコンテナを強制的に停止・削除します。本番環境では慎重に使用してください。
方法2: docker start で既存コンテナを再起動する
停止済みのコンテナを再び使いたい場合は、新しくコンテナを作る必要はありません。docker start で既存コンテナをそのまま再起動できます。
# 停止済みコンテナを再起動
docker start web
# ログを確認
docker logs web
💡 docker run と docker start の違い docker run は「イメージから新しいコンテナを作成して起動」するコマンドです。一方 docker start は「すでに存在するコンテナを起動」するコマンドです。停止済みコンテナに再び入りたい場合は docker start を使いましょう。詳しくは Docker主要コマンド一覧 を参照してください。
方法3: –name を変えて別名で起動する
既存のコンテナを残したまま、新しいコンテナも起動したい場合は、別の名前を指定しましょう。
# 別名で新しいコンテナを起動
docker run --name web2 -d -p 8081:80 nginx
同じイメージから複数のコンテナを並行して動かしたい場合に便利です。ただし、ポート番号が競合しないよう注意してください。
方法4: docker run –rm で使い捨てコンテナにする
--rm オプションを付けると、コンテナが停止したタイミングで自動的に削除されます。一時的な動作確認やテストに最適です。
# コンテナ停止時に自動削除される
docker run --rm --name web -d nginx
このオプションを使えば、停止済みコンテナが残ることがないため、同じ名前で何度でも docker run を実行できます。詳しくは docker run -d の解説記事 もあわせてご覧ください。
そもそもコンテナが残る仕組み
Dockerのコンテナには「作成 → 起動 → 停止 → 削除」というライフサイクルがあります。ポイントは、コンテナを停止しても自動的には削除されないということです。
# ライフサイクルのイメージ
docker run → コンテナ作成+起動
docker stop → 停止(コンテナは残る)
docker start → 再起動(停止中のコンテナを再利用)
docker rm → 削除(完全に消える)
停止しただけのコンテナは docker ps -a で確認でき、docker start でいつでも再起動できます。この仕組みのおかげでデータを保持したまま再開できますが、不要なコンテナがたまりやすいという面もあります。
コンテナのライフサイクルについて詳しく知りたい方は、コンテナのライフサイクル解説記事 をご覧ください。
再発防止のベストプラクティス
コンテナ名の重複エラーを未然に防ぐための習慣を紹介します。
✅ テスト用途では –rm を付ける
ちょっとした動作確認であれば、--rm を付けて実行する習慣をつけましょう。停止済みコンテナが残らないため、同じ名前のエラーに悩まされることがなくなります。
docker run --rm --name test-web -d -p 8080:80 nginx
✅ 不要なコンテナを定期的に掃除する
停止済みコンテナがたまってきたら、まとめて削除しましょう。
# 停止中のコンテナを一括削除
docker container prune
# 確認なしで一括削除
docker container prune -f
✅ docker compose を活用する
複数のコンテナを管理する場合は、docker compose の利用がおすすめです。docker compose down でコンテナの停止と削除をまとめて行えるため、コンテナ名の衝突が起きにくくなります。
# コンテナの停止+削除をまとめて実行
docker compose down
# 再作成して起動
docker compose up -d
まとめ
「The container name is already in use」エラーは、同じ名前のコンテナがすでに存在しているために発生します。対処法をまとめると以下の通りです。
| 状況 | 対処法 |
|---|---|
| 不要なコンテナが残っている | docker rm コンテナ名 で削除してから再実行 |
| 前回のコンテナを再利用したい | docker start コンテナ名 で再起動 |
| 両方のコンテナが必要 | --name で別の名前を付けて起動 |
| 一時的な検証だけ | docker run --rm で自動削除されるコンテナを使う |
根本的には、Dockerのコンテナは停止しても自動削除されないという仕組みを理解しておくことが大切です。docker ps -a でこまめにコンテナの状態を確認する習慣をつけましょう。



コメント