localtime / timezoneを最も一般的で分布に依存しない方法で設定する方法は?


4

間違ったタイムゾーンで実行されているdockerコンテナーを作成しました。個人的にはタイムゾーン(ヨーロッパ/ストックホルム、GMT + 1)で実行する必要があります。プロジェクトはオープンソースであるため、他のユーザーもそれを変更したい場合があります。Dockerfileやdocker-compose.ymlなどでこれを誰でも簡単に変更できるようにしたいと思います。

可能であれば、誰かが別のディストリビューションを使用したい場合に備えて、CentOSだけでなくソリューションが適用可能であることも願っています。

Dockerコンテナにlocaltime / timezoneを設定するための、最も不可知論的なアプローチは何ですか?


これらの2つのアプローチは一般的であるように見えますが、それらが私にとって本当に最善の方法であるかどうかはわかりません。

TZ環境変数

一部のLinuxディストリビューションは、TZ環境変数を読み取ります。ただし、centos:7画像を使用すると機能しないことに気づきました。

/ etc / localtime

あなたは、コンテナのマッピングすることができます/etc/localtimeにを/etc/localtimeドッキングウィンドウ-compose.ymlでホスト上で。しかし、これを行うと、その使用のディストリビューション/etc/timezoneはUTCに残り、読み取り中のソフトウェアは間違ったタイムゾーンを読み取ります。


/etc/localtime究極のフォールバックロケーションです。ただし、最後の段落はわかりません。ほとんどの場合、これはシンボリックリンクです。実際のファイルをコンテナにコピーすると、目的の結果が得られます。
ダニエルB

@DanielB世話をしても、/etc/localtimeいくつかのソフトウェアが依存しているように思え/etc/timezoneます。そのため、この/etc/localtimeアプローチが本当に最高のものかどうか疑問に思っていました。
fredrik

その場合、ソフトウェアを修正する必要があると思います。/etc/localtimeOS XやFreeBSDを含むほぼすべての場所で利用できます。
ダニエルB

1
次のようなディストリビューション:RUN echo "Europe / Stockholm"> / etc / timezoneその他:RUN ln -s / usr / share / zoneinfo / Europe / Stockholm / etc / localtime
joat

回答:


3

Distro-agnosticでは、どのディストリビューションが使用されているかを検出するスクリプトが必要です。これは、各ディストリビューションの「ファミリー」がタイムゾーンを記録する方法が異なるためです。Dockerfileに以下を追加するとうまくいく場合があります:

RUN echo "Europe / Stockholm"> / etc / timezone

その他(Debianなど)では、上記を使用してから、次のような別のDockerfileコマンドを使用する必要があります。

RUN RUN sudo dpkg-reconfigure -f noninteractive tzdata

他のディストリビューション(CentOSを含むIIRC)には次のようなものが必要です。

RUN ln -s / usr / share / zoneinfo / Europe / Stockhom / etc / localtime

ディストリビューションに依存しないようにするには、各ゾーンのタイムゾーンを再構成する方法を調査する必要があります。/ etc / localtimeを見ると、テキストファイルではないことがわかります。


とにかくOSのタイムゾーン設定を無視するアプリケーションもあります:-7。たとえば、jenkinsはJavaベースです。jenkinsサービス/開始スクリプトでタイムゾーンを設定するには、いくつかのjava引数を渡す必要があります。そのため、Distro-agnosticとApp-agnosticは、/ etc / localtimeと/ etc / timezone以外のシナリオをカバーする必要があります
gaoithe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.