最も一般的かつディストリビューションに依存しない方法でローカルタイム/タイムゾーンを設定するにはどうすればよいでしょうか?

最も一般的かつディストリビューションに依存しない方法でローカルタイム/タイムゾーンを設定するにはどうすればよいでしょうか?

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

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

Docker コンテナでローカルタイム/タイムゾーンを設定するための、ディストリビューションに依存しない最も効果的な方法は何ですか?


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

TZ環境変数

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

/etc/ローカルタイム

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

答え1

ディストリビューションに依存しない場合は、どのディストリビューションが使用されているかを検出するスクリプトが必要です。これは、各ディストリビューションの「ファミリー」がタイムゾーンの表記方法が異なるためです。一部のディストリビューションでは、Dockerfile に次のコードを追加すると機能する可能性があります。

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

その他 (例: Debian) では、上記を使用した後に次のような別の Dockerfile コマンドを使用する必要があります。

実行 実行 sudo dpkg-reconfigure -f 非対話型 tzdata

他のディストリビューション (CentOS を含むと記憶している) では次のようなものが必要になります。

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

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

関連情報