Docker関連ファイルの設定
以下で設定。
- docker-compose.yml
version: '3'
services:
db:
container_name: mysql-test-db
build:
context: .
dockerfile: ./Docker/mysql/Dockerfile
volumes:
- ./Docker/mysql/sqls:/docker-entrypoint-initdb.d
- ./Docker/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- TZ=Asia/Tokyo
ports:
- '13310:3306'
- Dockerfile
FROM mysql:5.7
ADD ./Docker/mysql/conf.d/my.cnf /etc/mysql/conf.d/my.cnf
- my.cnf
[mysqld]
character-set-server = utf8mb4
[mysql]
character-set-server = utf8mb4
[client]
character-set-server = utf8mb4
発生事象
以下を実行。
docker-compose up -d
Mysqlに接続しようとするとできない。
mysql -u root -h 127.0.0.1 -P 13310 -p
Enter password:
ERROR 1130 (HY000): Host '192.168.32.1' is not allowed to connect to this MySQL server
以下でログを確認するとMySQL init process failed.
が発生している。
docker-compose logs -f
(略)
mysql-test-db | MySQL init process in progress...
mysql-test-db | MySQL init process in progress...
mysql-test-db | MySQL init process in progress...
mysql-test-db | MySQL init process failed.
mysql-test-db exited with code 1
bashでコンテナに入ってmysqlを叩くとエラーが表示される。
docker container exec -it mysql-test-db bash
root@b50bff16a01d:/# mysql
mysql: [ERROR] unknown variable 'character-set-server=utf8mb4'
修正後ファイル
- my.cnf
[mysqld]
character-set-server = utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
単純にコピペミスでした。悲しい。。
修正後ファイル2
さらに半角スペースが入っていると正しく動作しないことがわかりました。。
以下で正常にログインまでできました。
(どこかでハマるとトライ&エラーでさらにハマってしまう悪い例です。元々はスペース無しでやっていたみたいです。)
- my.cnf
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
参考