iku8blog

Webエンジニアのタダのメモ。

docker-composeで立てたmysqlの接続情報が変更できない

dockerを使用してmysqlを立てた。

environmentにてパスワードとかDB名を指定していたが、その情報を変えても変更できなくなった。

設定ファイルはこんな感じ

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root!
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      TZ: 'Asia/Tokyo'
    ports:
      - ${DB_PORT}:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mysql/sql:/docker-entrypoint-initdb.d

.env

DB_NAME=mydb
DB_PORT=3306
DB_USER=mydb_user
DB_PASS=mydb_user!
DB_HOST=localhost

結論

コンテナ作成時に作られた接続情報がファイルとして残っていた。 DBの情報は./mysql/dataに入っているので、当たり前っちゃ当たり前。

解決方法

./mysql/dataを削除する

rm -rf ./mysql/data

ボリュームを作成している場合

ボリュームにDBデータを保存するようにしてる場合も同様のことをしてあげれば、接続情報を変更できる。

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root!
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      TZ: 'Asia/Tokyo'
    ports:
      - ${DB_PORT}:3306
    volumes:
      - db-data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mysql/sql:/docker-entrypoint-initdb.d

volumes:
  db-data:

db-dataというボリュームを作っているので、コンテナ起動時に接続情報などDBのデータは全てdb-dataに入る。

docker volume ls

ボリューム一覧を見るとコンテナ名+ボリューム名のボリュームがあるので削除してやればよい。

今回であれば、mysql_db-dataを削除

docker volume rm mysql_db-data

busyboxとかで作るボリュームコンテナの場合も同じように何かしら消してあげればよいはず。