Skip to main content

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

· 2 min read

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