Docker コンテナのタイムゾーンの変更
Docker コンテナでタイムゾーン設定は Dockerfile で特定のタイムゾーンへ変更するよりも、実行時に環境に合わせて外から変更できる方が移植性が高い状態を保つことができます
そのために、コンテナ起動時に /etc/localtime
へ任意のタイムゾーンファイルをアタッチすることで設定します
タイムゾーンの設定の仕方
タイムゾーンは /etc/localtime
で定義されています
このファイルはシンボリックリンクになっていて、向き先を任意のタイムゾーンファイルに変えることでタイムゾーンが変更されます
$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 32 May 29 14:22 /etc/localtime -> ../usr/share/zoneinfo/Asia/Tokyo
Docker コンテナのタイムゾーンを外から設定する
Docker ホスト側と同じタイムゾーンに設定する
Dockerコンテナを起動するホスト側の /etc/localtime
をコンテナ側に読み取り専用でアタッチすると、ホスト側のタイムゾーンと同じにすることができます
$ sudo docker run -it --rm -v /etc/localtime:/etc/localtime:ro ubuntu:16.04 date
Wed Jun 8 20:50:16 JST 2018
Docker ホスト側と別のタイムゾーンを設定する
ホストと別のタイムゾーンに設定したい場合でも、ホスト側に持っている定義ファイルを /etc/localtime
にアタッチすれば OK
$ sudo docker run -it --rm -v /usr/share/zoneinfo/America/Los_Angeles:/etc/localtime:ro ubuntu:16.04 date
Tue Jun 8 20:54:16 PDT 2018
※元ネタはこちらを参考にしました
https://stackoverflow.com/questions/22800624/will-docker-container-auto-sync-time-with-the-host-machine/22820278#22820278