概要
Docker環境でMysqlを使用する際、docker-compose.yml
に記載した環境変数が反映されず、作業ユーザーを作成出来ないエラーに遭遇しました。
docker-compose.yml
version: "3.7"
services:
~~~省略~~~
db:
container_name: db
build:
context: ./db
dockerfile: Dockerfile
ports:
- ${DB_PORT}:3306
environment:
MYSQL_DATABASE: ${DB_NAME} # 作成するデータベース名
MYSQL_USER: ${DB_USER} # 作業ユーザー名→上記データベースの捜査権限をもつ
MYSQL_PASSWORD: ${DB_PASS} # 作業ユーザーのパスワード
MYSQL_ROOT_PASSWORD: ${ROOT_PASS} # rootユーザーのパスワード
TZ: ${TZ}
volumes:
- db-data:/var/lib/mysql
- ./db/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./db/mysql/init:/docker-entrypoint-initdb.d
- ./log:/var/log/mysql
volumes:
db-data:
driver: local
Dockerfile
FROM mysql:8.0
EXPOSE 3306
そもそもなぜ作業ユーザーを作成するか?
下記記事参照。
・【MySQL】ユーザーの作成方法について解説!
原因
前作業でrootユーザーのみでdocker構築をしており、volume機能でデータが永続化していたため、後作業で記述した環境変数が反映されていないというものでした。
ビルドし直しても反映されない!そもそも消えることがないようにvolume機能を使用していたのに・・・
解決
MySQLのデータを初期化
$ docker-compose down --volumes
$ docker-compose up -d
down
コマンド時に--volumes
オプションを追記すれば、volumeも一緒に削除されます。
次回up
コマンドで起動すれば、新しいvolumeが再構築されます。