🐕
docker compose で MySQL を動かすときのタイムゾーン指定方法
まえがき
- 個人開発で SELECT NOW() したときに、UTC の日付時刻が返ってきたため修正する!
環境
- WSL2 (Windows 10 64bit)
- Ubuntu 22.04.2 LTS
- docker compose
- MySQL 8.0.32
- docker compose
- Ubuntu 22.04.2 LTS
手順
docker-compose.yaml を編集
- 現状はこんな感じ
version: '3.9'
services:
mysql:
build: ./mysql
volumes:
- ./mysql/data:/var/lib/mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=password
- ビルド時にタイムゾーンがセットされるように environment と command を追加
version: '3.9'
services:
mysql:
build: ./mysql
volumes:
- ./mysql/data:/var/lib/mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=password
- TZ=Asia/Tokyo
command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_general_ci','--default-time-zone=+09:00']
補足
- mysqld とは MySQL の処理をつかさどる Daemon(大味解釈)
- MySQL 8.0.32 における character-set-server と collation-server の初期値は以下
mysql> SELECT @@character_set_server, @@collation_server;
+------------------------+--------------------+
| @@character_set_server | @@collation_server |
+------------------------+--------------------+
| utf8mb4 | utf8mb4_0900_ai_ci |
+------------------------+--------------------+
1 row in set (0.00 sec)
確認
-
docker compose up --build -d
して、ビルドできることを確認 - mysql に入って、now() が日本時間になっていることを確認
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2023-03-05 20:40:54 |
+---------------------+
1 row in set (0.00 sec)
- 完了!
参考
-
How to set the timezone of MySQL on Docker Compose
https://medium.com/@gyahoo617/how-to-set-the-timezone-on-docker-compose-mysql-81faf425ded4
Discussion