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

Posted on
qiita Linux Docker alpine

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

スリムな 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