はじめに
小ネタです。暖かく見守ってください。
コンテナの名前が被りがち
何かしらコンテナを検証するとき、docker run、docker stop、docker rmを繰り返すことがよくあります。例えばAnsibleを使っていて、Managedノードをコンテナで作成して検証するときなどです。コンテナ名はtestとか適当につけるので、もしtestという名前のコンテナを消し忘れていると、以下のように怒られます。
|
1 2 3 4 5 6 |
$ docker run -d --name test nginx #1つ目 c2a87c04694e86728a84c37f32e637a318b08de85974e02202f9e291254c57b5 $ docker run -d --name test nginx #2つ目 docker: Error response from daemon: Conflict. The container name "/test" is already in use by container "c2a87c04694e86728a84c37f32e637a318b08de85974e02202f9e291254c57b5". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'. |
怒られて当然です。確認しない自分も悪いんです。でも何度も何度も怒られてるうちに、悲しい気持ちになってきます。
対策方法
作りたいコンテナの名前を決めている場合、その名前のコンテナがすでに存在したときに、docker stopをdocker rm行うには、以下のワンライナーを実行すれば良いです。1
|
1 2 |
#コンテナ名がtest1のとき docker ps -aq --filter "name=test1" | grep -q . && docker stop test1 && docker rm -fv test1 |
私は検証対象となるコンテナを起動するときのdocker runのオプションも決まっている場合が多いので、以下のようなショボいスクリプトを書いて対策しました。もっといい方法があれば教えてください。
当然dockerの部分をpodmanとしても動きます。Podmanに関しては、以下をご参考に。

CentOS 8で、Dockerの代替らしい Podman を少し使ってみる
NishipyRHEL 8では、コンテナエンジンとしてDockerではなくPodmanがサポートされるらしいので、使ってみました。はじめにPodmanを触ってみます。RHEL 8では、Dockerがサポート対象外にR...(続く)
以上.
- このStackOverflowの回答参照のこと。 ↩



コメント