dockerで使用されるコンテナ(docker上での個々の仮想マシンのこと)にはランダムなIDが割り付けられますが、これとは別に、ユーザーが任意の名前を付けることができます。
そのためわかりやすい名前をつけておけばそれを使用してコンテナの操作を行うことができるためとても楽です。
一方で、このユーザーが指定できるコンテナ名は重複することができず、ほかに同名のコンテナ名が存在すると重複した時点でエラーとなってしまいます。
docker-compose up -d
...省略...
Creating mysql ... error
ERROR: for mysql Cannot create container for service mysql: b'Conflict. The container name "/mysql" is already in use by container "コンテナID". You have to remove (or rename) that container to be able to reuse that name.'
...省略...
ERROR: for mysql Cannot create container for service mysql: b'Conflict. The container name "/mysql" is already in use by container "コンテナID". You have to remove (or rename) that container to be able to reuse that name.'
ERROR: Encountered errors while bringing up the project.
Failed to deploy 'Compose: docker-compose.yml': `docker-compose` process finished with exit code 1
このエラーによく遭遇するシチュエーションとしては、docker-composeを使用した一括構築を行った際、複数のComposeファイルを使用して同じDockerホスト上で構築を行うと、各Composeファイルに記述されているコンテナ名が一般的なもの(例えばMySQLが入っているコンテナには”mysql”という名前がついていたりなど)になっていることがあるため、しばしばエラーとなってしまいます。
この場合は、Composeファイル(docker-compose.yml)内の
“container_name”
ディレクティブを既存のコンテナと被らないように変更すれば、共存させることが可能です。
例えば、複数のdocker-compose.yml内での指定で
...省略...
mysql:
container_name: "mysql"
...省略...
のように指定がかぶってしまっている場合は
...省略...
mysql:
container_name: "mysql_service1"
...省略...
のように名前を変えておくことで、共存させることが可能になります。
dockerはOSからアプリケーションまでの間の部分の構築もかなり簡単にしてくれるので、複数人で同じ環境を再現して開発を行いたい場合はとてもありがたい仕組みではあるのですが、一部環境に合わせて設定を変更しなければならない場合もあるので、この辺りは注意が必要になりそうですね。