概要
この記事は以下の状態に陥っている方に向けたものです。
-
docker run --name (コンテナ名) ...
で実行したときに以下のエラーが出た
Error response from daemon: Conflict. The container name (コンテナ名) is already in use by container (コンテナID) ...
- その上で
docker ps -a
を実行し、停止中を含めたすべてのコンテナ名の一覧を確認したが、先ほどのコンテナ名は存在しなかった -
docker ps -a
では表示されなかったが、実際には存在しているのではと考え、docker stop (コンテナ名 or コンテナID)
やdocker rm (コンテナ名 or コンテナID)
を実行したが、以下のエラーが出た
Error response from daemon: No such container: (コンテナ名 or コンテナID)
コンテナ名が衝突しているのに、その名前を持つコンテナが見当たらないという状況です。
レアケースなため、英語含め、どのサイトにもあまり解決方法が書かれていません。(1件だけ見つけましたが見失いました。かろうじてその解決方法は覚えていたので後で示します。)
そんな状況の解決方法を見ていきましょう。
解決方法
以下のコマンドを実行し、停止中のコンテナをすべて消します。
docker container prune
これを行うと、衝突のエラー時に表示されたコンテナIDが一緒に消された旨の表示が出ます。
その後にdocker run --name (コンテナ名) ...
を行うと、私の場合は衝突せずに実行できました。
停止中のコンテナで消してはいけないものがあった場合にはstartで実行状態に戻したり必要なログだけ取ったりしたうえで消しましょう。
解決方法2
こちらは私が見失った英語のサイトに書かれていた唯一の方法です。他のコンテナを止める必要があるので上で無理だった場合に試すのがおすすめです。
以下のコマンドでDockerを再起動します。
sudo systemctl restart docker
これでキャッシュとか色々なものがきれいになって動くかもしれません。
これでダメだった場合はOS自体の再起動で治るかもしれません。
環境
参考までに覚えている範囲で書いておきます。
- OS: Ubuntu 24.04
- Docker: 忘れた(気が向いたら追記します)
おわりに
Dockerで容量が足りないとか言われた場合にも、今回紹介したprune系のコマンド(containerだけでなく、imageやnetworkにも存在する)が効いたりします。
便利なコマンドなのでいざというときに思い出してあげてください。