事象
下記のようにDockerを用いて、DBを構築しようとしていました。
Dockerfile
FROM mysql:8.0
RUN mkdir /var/log/mysql
RUN touch /var/log/mysql/mysqld.log
docker-compose.yml
version: '3'
services:
dbserver:
build: ./docker/mysql
image: test-db:0.0.1
restart: always
environment:
MYSQL_DATABASE: test_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3306:3306"
volumes:
- ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./log/mysql:/var/log/mysql
- ./docker/mysql/data:/var/lib/mysql
volumes:
mysql-bd:
driver: local
いったんコンテナを作成した後に、データベースの名前を変えようと思い、
environment:
MYSQL_DATABASE: test_db
の箇所を変更し、コンテナを再作成後にデータベース名を確認してみたところ、データベース名が変更前から変わっていませんでした。
原因と解決策
原因は、データを永続化させるためにvolumesに記載したこちらの1行でした。
- ./docker/mysql/data:/var/lib/mysql
コンテナを再作成する際に、./docker/mysql/dataを消去していなかったため、変更前の情報が残っており、docker-compose.ymlを変更しても、DBの名前が変わらないという現象が発生していました。
というわけで、./docker/mysql/dataの中身を消去して、コンテナを再作成したところ、無事にDBの名前を変更することができました。
まとめ
永続化しているDBの情報を編集する場合は、コンテナを再作成する前に、永続化しているデータを持つディレクトリの中身を消すことを忘れないようにしてみてください。
わかってしまえば非常に単純な話ですが、恥ずかしながら気づくのにかなり時間がかかってしまいました...
本記事が少しでも誰かのお役に立てば幸いです。
最後までお読みいただきありがとうございました。