はじめに
小ネタです。暖かく見守ってください。
コンテナの名前が被りがち
何かしらコンテナを検証するとき、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の回答参照のこと。 ↩
コメント