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

この記事は最終更新日から3年以上が経過しています。

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

dtan4
SRE @ Microservices Platform Team
http://dtan4.hatenablog.com/
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント

"-v /etc/localtime:/etc/localtime:ro"オプションをつけるという手もあります。

"-v /etc/localtime:/etc/localtime:ro"

Docker ホストと同一のタイムゾーンにするならこっちのがシンプルですね!

あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした