ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録。投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。

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

最初にしていた勘違い

コンテナのタイムゾーンってホストOSのタイムゾーンが自動的に同期されるよね

されませんでした

Linuxってどこでタイムゾーンを設定してるの?

色々調べたところ、以下の優先順位で設定されます。

  1. 環境変数 TZ
  2. /etc/localtime (/usr/local/etc/localtime)

ただしこれはGNU Cライブラリを利用している場合、他のCライブラリを使っている場合は異なる挙動になると思います。これはPOSIXというUNIX OSの標準規格で定義されているようです。

www.gnu.org

docker runしてコンテナを起動するとき、何もオプションを付けなければ環境変数TZには何も入っていないので /etc/localtime が利用されます。このファイルはコンテナイメージ独自のものなので残念ながらホストOSのタイムゾーンが同期されることはありませんでした。

タイムゾーンを変更する

前述の通り、これはGNU Cライブラリを利用しているコンテナイメージにしか適用されない認識です。

  • docker run -e TZ=Asia/Tokyo
  • docker run -it --rm -v /etc/localtime:/etc/localtime
    • ホストの /etc/localtime をマウントします。これならホストOSとタイムゾーンの同期が取れます

最後に

誤りあればご指摘お願いします!