docker run時に、 --nameでコンテナ名をつけたいけど、普通に --nameしてしまうと2個以上コンテナをrunしたい時に、名前の重複エラーとなってしまいます

1
2
3
4
5
6
7
8
9
10
// 「web-server」という名前のNginxコンテナをrunする(1回目)
$ docker run -d --rm --name web-server nginx
37ecac789ea357dbc2063babcc08e19b7dc826d781625fac9e88632345ff3032

$ docker ps --no-trunc --format "{{.ID}} {{.Image}} {{.Names}}"
37ecac789ea357dbc2063babcc08e19b7dc826d781625fac9e88632345ff3032 nginx web-server

// 2回目を実行すると、既に「web-server」という名前のコンテナは存在するため重複エラーとなる
$ docker run -d --rm --name web-server nginx
docker: Error response from daemon: Conflict. The container name "/web-server" is already in use by container "37ecac789ea357dbc2063babcc08e19b7dc826d781625fac9e88632345ff3032". You have to remove (or rename) that container to be able to reuse that name.

これを、 docker renameコマンドを使用して、runした時に表示されるコンテナIDをパイプして、 docker renameで、 web-server-[コンテナID]という名前に変更します

--name使用しなかったらdockerがランダムで名前をつけてくれますし、 docker-compose使えばいいじゃん、というのもあるかと思いますが、本記事ではそれらは対象外です)

1
2
3
4
5
6
7
8
9
10
// 「web-server」を3回runする
$ docker run -d --rm --name web-server nginx | xargs -IXXX docker rename web-server web-server-XXX
$ docker run -d --rm --name web-server nginx | xargs -IXXX docker rename web-server web-server-XXX
$ docker run -d --rm --name web-server nginx | xargs -IXXX docker rename web-server web-server-XXX

// 一意な「コンテナID」に毎回リネームされているため、重複は起きなくなります
$ docker ps --no-trunc --format "{{.ID}} {{.Image}} {{.Names}}"
5251f4cd75e7c6e77c3237419d3b974c432e35fb7fbca7c2bcca93d7c5a49429 nginx web-server-5251f4cd75e7c6e77c3237419d3b974c432e35fb7fbca7c2bcca93d7c5a49429
7a6c8c9894e079450044385c7ab2f0316f0c3975339f8cdcac1e44f28e890306 nginx web-server-7a6c8c9894e079450044385c7ab2f0316f0c3975339f8cdcac1e44f28e890306
a0e6ca5f62fdd3f7206145974f2c31eb553d6220819fdad686cc007069dc4e6a nginx web-server-a0e6ca5f62fdd3f7206145974f2c31eb553d6220819fdad686cc007069dc4e6a