LoginSignup
14
10

More than 3 years have passed since last update.

Dockerを使って、Alpineのタイムゾーンを設定してみた

Last updated at Posted at 2019-09-23

Dockerの公式ベースイメージとなっているAlpineでJSTのタイムゾーンを設定してみた。

参考にしたのはこちら
https://wiki.alpinelinux.org/wiki/Setting_the_timezone

デフォルトでの日時を確認する

下記のdocker-compose.ymlを作成して、

docker-compose.yml
version: '3'
services:
  timezone:
    image: alpine:3

シェルでコンテナに入る

sh
$ docker-compose run timezone sh

dateコマンドで、日時を表示

sh
# date
Mon Sep 23 08:49:05 UTC 2019

UTC時間が表示されている

tzdataをインストールする

sh
# 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ディレクトリが作成された。

sh
# 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

ちなみにインスール前はディレクトリがないよって怒られる

sh
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory

/etc/localtimeファイルを作成して、JSTのタイムゾーンを設定する

/etc/localtimeファイルを作成して、/usr/share/zoneinfo/Asia/Tokyoの内容をコピーする。

/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時間を表しているのかな?

sh
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
/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が作成されて、内容もコピーされてる

タイムゾーンを設定する

sh
# echo "Asia/Tokyo" >  /etc/timezone
/etc/timezone
Asia/Tokyo

ちゃんと設定されてる

dateで時間を確認してみる

sh
# date
Mon Sep 23 17:55:57 JST 2019

JST時間で表示されている

後片付けで、tzdataをアンインストールする

sh
# apk del tzdata
(1/1) Purging tzdata (2019b-r0)
Executing busybox-1.30.1-r2.trigger
OK: 6 MiB in 14 packages
sh
# ls /usr/share/zoneinfo
ls: /usr/share/zoneinfo: No such file or directory

ちゃんとアンインストールできた。

おまけ

環境変数TZでdockerfileやdocker-compose.ymlでタイムゾーンを設定したい場合は、
tzdataをアンインストールせずにすると設定できる
(アンインストールしていると設定しても反映されなかった)

dockerfileで環境変数TZを設定する

dockerfile

FROM alpine:3

RUN apk add tzdata
ENV TZ=Asia/Tokyo
docker-compose.yml
version: '3'
services:
  timezone:
    build: ./
sh
$ docker-compose build
sh
$ docker-compose run timezone sh
sh
# date
Mon Sep 23 18:51:33 JST 2019

docker-compose.ymlで環境変数TZを設定する

dockerfile
FROM alpine:3

RUN apk add tzdata
docker-compose.yml
version: '3'
services:
  timezone:
    build: ./
    environment:
      TZ: Asia/Tokyo
sh
$ docker-compose build
sh
$ docker-compose run timezone sh
sh
# date
Mon Sep 23 19:00:33 JST 2019

終わり

タイムゾーン奥が深い

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10