docker run時にコンテナ名を動的につけるメモ
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