はじめに
小ネタです。暖かく見守ってください。
コンテナの名前が被りがち
何かしらコンテナを検証するとき、docker run
、docker stop
、docker rm
を繰り返すことがよくあります。例えばAnsibleを使っていて、Managedノードをコンテナで作成して検証するときなどです。コンテナ名はtest
とか適当につけるので、もしtest
という名前のコンテナを消し忘れていると、以下のように怒られます。
怒られて当然です。確認しない自分も悪いんです。でも何度も何度も怒られてるうちに、悲しい気持ちになってきます。
対策方法
作りたいコンテナの名前を決めている場合、その名前のコンテナがすでに存在したときに、docker stop
をdocker rm
行うには、以下のワンライナーを実行すれば良いです。1
私は検証対象となるコンテナを起動するときのdocker run
のオプションも決まっている場合が多いので、以下のようなショボいスクリプトを書いて対策しました。もっといい方法があれば教えてください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Remove containers if exist, then launch containers. | |
# -- See https://stackoverflow.com/questions/34228864/stop-and-delete-docker-container-if-its-running | |
for NAME in test1 test2 test3; do | |
docker ps -a -q --filter name="${NAME}" | grep -q . && docker stop "${NAME}" && docker rm -fv "${NAME}" | |
docker run -d --name "${NAME}" nginx | |
done |
当然docker
の部分をpodman
としても動きます。Podmanに関しては、以下をご参考に。

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