【Docker】docker-compose.ymlの変更がDBに反映されなかった話


事象

下記のように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の情報を編集する場合は、コンテナを再作成する前に、永続化しているデータを持つディレクトリの中身を消すことを忘れないようにしてみてください。

わかってしまえば非常に単純な話ですが、恥ずかしながら気づくのにかなり時間がかかってしまいました...

本記事が少しでも誰かのお役に立てば幸いです。
最後までお読みいただきありがとうございました。