docker-compoerでコンテナ名を指定して起動する

container_nameの問題点

dpocker-compose.yml内でcontainer_nameを使ってコンテナ名を指定することができる。

1
2
3
4
5
version: "3"
services:
web:
container_name: app_server
image: php:7.4-apache

しかし、この場合コンテナ名が重複し同じコンテナを複数起動することができない。

1
2
3
4
5
6
7
8
9
10
11
$ sudo docker-compose up -d --scale php=2
WARNING: The "php" service is using the custom container name "app_server". Docker requires each container to have a unique name. Remove the custom name to scale the service.
Creating app_server ... done
Creating app_server ...

ERROR: for app_server Cannot create container for service php: Conflict. The container name "/app_server" is already in use by container
"b4655b49084b30c3fe62bc26b87b997d2f4c6f2bc436594925d7560bxxxxxxxx". You have to remove (or rename) that container to be able to reuse that name.

ERROR: for php Cannot create container for service php: Conflict. The container name "/app_server" is already in use by container
"b4655b49084b30c3fe62bc26b87b997d2f4c6f2bc436594925d7560bxxxxxxxx". You have to remove (or rename) that container to be able to reuse that name.
ERROR: Encountered errors while bringing up the project.

COMPOSE_PROJECT_NAME

.envファイルにCOMPOSE_PROJECT_NAMEを指定すると、指定されたコンテナ名にサービス名<番号>が自動的に設定される。 COMPOSE_PROJECT_NAMEの指定がない場合は、docker-compose.ymlが存在するディレクトリー名になる。

実行例

.envにCOMPOSE_PROJECT_NAMEを設定する。

1
COMPOSE_PROJECT_NAME=app_server

–scaleオプションでコンテナを複数起動する。

1
2
3
4
$ sudo docker-compose up -d --scale php=2
Creating network "app_server_default" with the default driver
Creating app_server_php_1 ... done
Creating app_server_php_2 ... done

コンテナ名に自動的に連番が付与される、複数のコンテナを起動できる。

プロジェクト名を指定してdocker-composeを実行する

同じプロジェクトのコンテナ群を複数起動したい場合には、docker-omposeに-p <プロジェクト名>オプションを付与して実行することで、プロジェクト名を指定してコンテナを起動する。

1
2
3
4
$ sudo docker-compose -p another up -d --scale php=2
Creating network "another_default" with the default driver
Creating another_php_1 ... done
Creating another_php_2 ... done