Dockerコンテナでタイムゾーンを同期する方法

Dockerコンテナでタイムゾーンを同期する方法

スタック内のすべてのコンテナで同様のタイムゾーンを持つことにはいくつかの問題がありますdocker-compose

TZ=Europe/Parisコンテナに環境変数を追加し、次を試しました。

volumes:
  -v /etc/timezone:/etc/timezone:ro
  -v /etc/localtime:/etc/localtime:ro

現在/etc/timezoneDebian / Ubuntuベースのコンテナでは実行(バンドル)できますが、Alpineベースのコンテナでは実行できません。

ベストプラクティスは何ですか、そして/またはすべてのLinuxコンテナに適用されるものは何ですか?

答え1

ボリュームを使用してタイムゾーンを変更するのはうまくいきません。ホストとコンテナの間に多くの依存関係が発生します。 kubernetes またはホスティング環境で実行している場合は、ホストのタイムゾーンを制御できません。

変数を使用することをお勧めしますTZ

Ubuntuの場合、画像にすでにパッケージがある場合はTZ変数を設定できますtzdata

Ubuntu 18.04/19.04/19.10の場合

これらは動作しません

for V in 18.04 18.10 19.04 19.10
do
   docker run -e TZ=America/New_York -it ubuntu:${V} /bin/bash -c date
done

しかし、これらは

for V in 18.04 18.10 19.04 19.10
do
    docker run -e TZ=America/New_York -it ubuntu:${V} \
       /bin/bash -c '( export DEBIAN_FRONTEND=noninteractive ; apt-get update ; apt-get install tzdata ) >/dev/null 2>&1 ; date'
done

*DEBIAN Stretch/Busterの場合*

これらは動作しています

docker run -e TZ=America/New_York -it debian:stretch /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster-slim /bin/bash -c date
docker run -e TZ=America/New_York -it debian:buster /bin/bash -c date
docker run -e TZ=America/New_York -it debian:stretch-slim /bin/bash -c date

アルプスのために

これは次のようになります。

docker run -e TZ=America/New_York -it alpine:3.10 date

これはうまくいきません:

docker run -e TZ=America/New_York -it alpine:3.10 /bin/sh -c '(apk update ; apk add tzdata)>/dev/null 2>&1  ; date '

CentOSの場合

これらは動作しています

 for V in 6 7 8 ; 
 do  
      docker run -e TZ=America/New_York -it centos:${V}  /bin/bash -c date ; 
 done

関連情報