最初にしていた勘違い
コンテナのタイムゾーンってホストOSのタイムゾーンが自動的に同期されるよね
↓
されませんでした
Linuxってどこでタイムゾーンを設定してるの?
色々調べたところ、以下の優先順位で設定されます。
- 環境変数
TZ
- /etc/localtime (/usr/local/etc/localtime)
ただしこれはGNU Cライブラリを利用している場合、他のCライブラリを使っている場合は異なる挙動になると思います。これはPOSIXというUNIX OSの標準規格で定義されているようです。
docker runしてコンテナを起動するとき、何もオプションを付けなければ環境変数TZには何も入っていないので /etc/localtime
が利用されます。このファイルはコンテナイメージ独自のものなので残念ながらホストOSのタイムゾーンが同期されることはありませんでした。
タイムゾーンを変更する
前述の通り、これはGNU Cライブラリを利用しているコンテナイメージにしか適用されない認識です。
docker run -e TZ=Asia/Tokyo
- 環境変数でTZを指定します
docker run -it --rm -v /etc/localtime:/etc/localtime
- ホストの
/etc/localtime
をマウントします。これならホストOSとタイムゾーンの同期が取れます
- ホストの
最後に
誤りあればご指摘お願いします!