🕖
【Docker】AlpineとMariaDBのtimezone設定
dockerコンテナで動かすWebシステムについて、ログ等を考慮して時刻を日本時間で扱いたいと思いました。
Alpine Linux
もともとの状況として、ベースのコンテナイメージでdateコマンドを実行するとUTC時間になっています。
[centos@pmsv02 app]$ sudo docker run -i python:3.7-alpine date
Thu Apr 15 00:33:35 UTC 2021
このページで書かれている内容をそのままDockerfileの適当な位置に書き込みます。
RUN apk add tzdata && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
echo "Asia/Tokyo" > /etc/timezone && \
apk del tzdata
ビルドして実行したコンテナでdateコマンドを見ると、反映されていました。
[centos@pmsv02 app]$ sudo docker exec -i app-container date
Thu Apr 15 09:37:07 JST 2021
MariaDB
APサーバの時刻は上記でOKですが、アプリケーションの操作を試すと、DBに登録される日時はUTCのままでした。
使用しているMariaDBのコンテナのtimezone設定がUTCだからです。
MariaDB [(none)]> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.001 sec)
調べたところ、起動時に環境変数で「TZ=Asia/Tokyo」を指定すれば良いようです。
DIR_PATH=$(cd $(dirname $0); pwd)
sudo docker run -d --rm -p 3306:3306 --name mariadb \
-v ${DIR_PATH}/data:/var/lib/mysql \
-e TZ=Asia/Tokyo \
mariadb:10.5.8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
これでタイムゾーンがJSTとなり、datetime型が日本時間で保存されるようになりました。
MariaDB [(none)]> show variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | JST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.001 sec)
Discussion