Edited at

dockerコンテナ内のタイムゾーンを変更する

More than 1 year has passed since last update.


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