Dockerの公式ベースイメージとなっているAlpineでJSTのタイムゾーンを設定してみた。
参考にしたのはこちら
https://wiki.alpinelinux.org/wiki/Setting_the_timezone
デフォルトでの日時を確認する
下記のdocker-compose.ymlを作成して、
version: '3'
services:
timezone:
image: alpine:3
シェルでコンテナに入る
$ docker-compose run timezone sh
dateコマンドで、日時を表示
# date
Mon Sep 23 08:49:05 UTC 2019
UTC時間が表示されている
tzdataをインストールする
# apk add tzdata
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 9 MiB in 15 packages
タイムゾーンの設定値が記載されている、zoneinfoディレクトリが作成された。
# ls /usr/share/zoneinfo
Africa Australia Cuba Etc GMT+0 Iceland Kwajalein NZ Poland UCT Zulu
America Brazil EET Europe GMT-0 Indian Libya NZ-CHAT Portugal US iso3166.tab
Antarctica CET EST Factory GMT0 Iran MET Navajo ROC UTC posixrules
Arctic CST6CDT EST5EDT GB Greenwich Israel MST PRC ROK Universal right
Asia Canada Egypt GB-Eire HST Jamaica MST7MDT PST8PDT Singapore W-SU zone.tab
Atlantic Chile Eire GMT Hongkong Japan Mexico Pacific Turkey WET zone1970.tab
ちなみにインスール前はディレクトリがないよって怒られる
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory
/etc/localtimeファイルを作成して、JSTのタイムゾーンを設定する
/etc/localtimeファイルを作成して、/usr/share/zoneinfo/Asia/Tokyoの内容をコピーする。
TZif2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@^D^@^@^@^@^@^@^@ ^@^@^@^D^@^@^@^L.^@^@^@.>^Bp..Y....p..;..^G^@...^].........^C^A^B^A^B^A^B^A^B^@^@.^C^@^@^@^@..^A^D^@^@~.^@
JST-9
初めの行はよくわからない...
文字化けしているのか?
JST-9
UTCとJSTの差の9時間を表しているのかな?
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
TZif2^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^D^@^@^@^D^@^@^@^@^@^@^@ ^@^@^@^D^@^@^@^L.^@^@^@.>^Bp..Y....p..;..^G^@...^].........^C^A^B^A^B^A^B^A^B^@^@.^C^@^@^@^@..^A^D^@^@~.^@
JST-9
/etc/localtime
が作成されて、内容もコピーされてる
タイムゾーンを設定する
# echo "Asia/Tokyo" > /etc/timezone
Asia/Tokyo
ちゃんと設定されてる
dateで時間を確認してみる
# date
Mon Sep 23 17:55:57 JST 2019
JST時間で表示されている
後片付けで、tzdataをアンインストールする
# apk del tzdata
(1/1) Purging tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 6 MiB in 14 packages
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory
ちゃんとアンインストールできた。
おまけ
環境変数TZでdockerfileやdocker-compose.ymlでタイムゾーンを設定したい場合は、
tzdataをアンインストールせずにすると設定できる
(アンインストールしていると設定しても反映されなかった)
dockerfileで環境変数TZを設定する
FROM alpine:3
RUN apk add tzdata
ENV TZ=Asia/Tokyo
version: '3'
services:
timezone:
build: ./
$ docker-compose build
$ docker-compose run timezone sh
# date
Mon Sep 23 18:51:33 JST 2019
docker-compose.ymlで環境変数TZを設定する
FROM alpine:3
RUN apk add tzdata
version: '3'
services:
timezone:
build: ./
environment:
TZ: Asia/Tokyo
$ docker-compose build
$ docker-compose run timezone sh
# date
Mon Sep 23 19:00:33 JST 2019
終わり
タイムゾーン奥が深い