TL;DR
マウントするボリュームを変更したいなら以下のいずれかを実行して、コンテナを明示的に削除しないといけない
docker-compose up --renew-anon-volumes
docker-compose down && docker-compose up
docker container rm ${DB_CONTAINER_ID} && docker-compose up
何をしたかったのか
開発に使っているdbコンテナで実験がしたかったが、既存のデータを壊したくなかったので、docker-compose.ymlを書き換えることで新規のデータボリュームをアタッチしたかった
Before
version: ‘3.5’
services:
db:
image: mysql:5.6.38
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
web:
image: ruby
volumes:
- workspace:/workspace
depends_on:
- db
tty: true
volumes:
mysql-data:
workspace:
After
version: ‘3.5’
services:
db:
image: mysql:5.6.38
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
- mysql-data_new:/var/lib/mysql # <- ここ
web:
image: ruby
volumes:
- workspace:/workspace
depends_on:
- db
tty: true
volumes:
mysql-data_new: # <- ここ
workspace:
何が起きたのか
以下の警告が出て
WARNING: Service "db" is using volume "/var/lib/mysql" from the previous container. Host mapping "your-project_mysql-data_new" has no effect. Remove the existing containers (with `docker-com...
既存の"your-project_mysql-data"が使われ続けた。というか、以前のコンテナが使われ続けて、以前のデータボリュームがマウントされてしまった。
どうすればいいのか
docker-compose down
してコンテナを削除するか、DBコンテナだけ消したいなら
docker container rm ${DB_CONTAINER_ID}
すればいい。DBコンテナなら必要なのはデータボリュームだけだろうからコンテナをさくりと作り直すのがいい。
もしくは、 -V or --renew-anon-volumes
オプションをつけて、以前のコンテナからのボリュームの再利用を止めればいい。
https://github.com/docker/compose/issues/2481#issuecomment-279082091
https://github.com/docker/compose/issues/4476
このへんをみてようやく気づけた。
なぜそうなったのか
コンテナにアタッチしたボリュームは変更できない。なのでコンテナを作り直さないといけないんだけど、webの方のコンテナは docker-container up
を実行しただけで作成し直してくれた。コンテナを作り直してくれる条件が不明。