Docker 版 Nginx で timezone 指定にハマらない簡単な方法

Docker 版 Nginx

  • https://hub.docker.com/_/nginx/
  • ウェブサーバーのデプロイ、超楽になったご時世ですよね。
    • (envsubst のやり方だけが気持ち悪いと思っていますが…)

Alpine Linux イイヨイイヨー

  • 私は、軽量なイメージが好きなので、使えそうなら Alpine Linux 版を使います。

んが、 timezone を楽に指定できない。。。

  • docker-compose.yml の environment で、 TZ=Asia/Tokyo 指定したい場面、ありますよね。
  • Alpine Linux がベースのイメージだと (nginx:x.y.z-alpine) 、環境変数に TZ を指定して起動しても、 timezone 指定できません。
  • Issue には上がっているようですが、現状、 Dockerfile 書いて頑張るしか道はないようで。
  • ※ 2017 年 3 月 13 日段階の情報です。
# Alpine Linux ベース (TZ 指定なし)
$ docker run --name nginx_test -p 8080:80 nginx:1.10.3-alpine
172.17.0.1 - - [13/Mar/2017:13:36:59 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"

# Alpine Linux ベース (TZ 指定あり)
$ docker run --name nginx_test -p 8080:80 -e TZ=Asia/Tokyo nginx:1.10.3-alpine
172.17.0.1 - - [13/Mar/2017:13:38:16 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"

timezone を楽に指定したいなら

  • Alpine Linux ベースではない方のイメージ (Debian jessie ベース) を使って、環境変数 TZ を設定するのが一番簡単だと思います。
# Debian jessie ベース (TZ 指定なし)
$ docker run --name nginx_test -p 8080:80 nginx:1.10.3
172.17.0.1 - - [13/Mar/2017:13:34:35 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"

# Debian jessie ベース (TZ 指定あり)
$ docker run --name nginx_test -p 8080:80 -e TZ=Asia/Tokyo nginx:1.10.3
172.17.0.1 - - [13/Mar/2017:22:35:06 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"

一応、イメージサイズ比較のために、ペタッときます

$ docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
nginx                          1.10.3-alpine       f94d6dd9b576        9 days ago          54 MB
nginx                          1.10.3              e526633b91df        12 days ago         181 MB
  • まあ、3.5 倍ほどイメージサイズ違いますね。。。

まとめ

  • Docker 版 Nginx で timezone を楽に指定したいなら、 Debian jessie ベースのイメージを使うとお手軽ですね。
  • Alpine Linux ベースのイメージを使いたいなら、 tzdata を入れる Dockerfile を自分で作って管理すると良いのでは?