Posted at

Alpine Linux でタイムゾーンを変更する

More than 3 years have passed since last update.

スリムな Docker イメージを作るため、gliderlabs/alpine イメージをベースにバイナリを一個だけポンと置いて運用するみたいなことをしています。

gliderlabs/alpine イメージは(というかほとんどの OS イメージは)タイムゾーンが GMT (UTC+0) のままなので、時刻依存の作業をさせるときには気をつけないといけません。日本時間 (UTC+9) の感覚で書いたら、9時間遅れて実行されたとかログの時刻がずれるとか起こりえます。

まっさらの状態で date を打つと…

$ docker run --rm gliderlabs/alpine:3.3 date

Sat Feb 6 06:47:37 UTC 2016


タイムゾーンの設定

メジャーな Linux ディストリビューションと同じく、/etc/localtime を変更すればよいです。zoneinfo とかはそのままだと用意されていないので、apk で tzdata パッケージをインストールする必要があります。

Dockerfile で日本標準時 Asia/Tokyo に設定する場合は以下のようになります。ここで欲しいのは /usr/share/zoneinfo/Asia/Tokyo だけなので、tzdata はそれだけ抜き取ったら消しちゃいます。

FROM gliderlabs/alpine:3.3

RUN apk --update add tzdata && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
apk del tzdata && \
rm -rf /var/cache/apk/*

この Dockerfile からビルドしたイメージで date を叩くと…

$ docker run --rm alpine-jst date

Sat Feb 6 15:48:56 JST 2016

JST になりました :tada:


おわりに

タイムゾーンとか文字コードとか全角文字とか辛いので、イギリスに住みたいですね。


REF