参考
- https://qiita.com/hiroism/items/833170159d1d57a20e41
- https://stackoverflow.com/questions/62969110/compose-up-recreating-the-compose-service-created-by-other-directories
問題発生
開発用DBを用意するため、docker-compose.ymlで以下のような記述をしてdb/フォルダ内でdocker-compose up -d
をした
- myapp2/db/docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql_myapp2
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp2
MYSQL_USER: user
MYSQL_PASSWORD: root
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
restart: always
ports:
- 3307:3306
container_nameを独自のものにしていたため、独立して新しくコンテナが作られると思っていた。
しかし、同時に別プロジェクト同じフォルダ名(db)で以下のdocker-compose.ymlでDBを起動していた。
- myapp1/db/docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql_myapp1
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp1
MYSQL_USER: user
MYSQL_PASSWORD: root
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
restart: always
ports:
- 3306:3306
container_nameが別なので別のコンテナが作成され、新規のコンテナ(mysql_myapp2)と共存するものかと思っていた。
しかし、docker-compose up -dをすると、以前(myapp1)のコンテナが消され、置き換わってしまった!!!!!!!!!!
これは困った。
原因
上記参考リンクにある通りだが、原因はプロジェクト名(フォルダ名)の衝突にあるらしいことがわかった。双方ともdb/配下にdocker-compose.yml
を配置していたため。
ここではプロジェクト名を指定していないのでdbがプロジェクト名とされ、その衝突によってcontainerのrecreateが発生しているようである。
対処
- プロジェクト名を-pオプションで指定する
- ディレクトリ名をdb/から変える
結論、私は2の方法でdb-> myapp-dbというディレクトリ名に変えることによって解決した。
プロジェクト名を指定するのもよいが起動時に毎回それやるのが面倒なので(envファイルに書けばいいというのはある)。
感想
container_name違うんだから別コンテナ扱いしてくれないのなんで??わからない。