
Docker コンテナを作成しましたが、間違ったタイムゾーンで実行されています。個人的には、自分のタイムゾーン (ヨーロッパ/ストックホルム、GMT+1) で実行する必要があります。プロジェクトはオープンソースなので、他のユーザーも変更したいと考えるかもしれません。Dockerfile や docker-compose.yml などで誰でも簡単に変更できるようにしたいと考えています。
可能であれば、別のディストリビューションを使用したい場合にも、このソリューションが CentOS だけでなく適用可能であることを望みます。
Docker コンテナでローカルタイム/タイムゾーンを設定するための、ディストリビューションに依存しない最も効果的な方法は何ですか?
これら 2 つのアプローチは一般的であるように思われますが、私にとって本当に最善の方法であるかどうかはわかりません。
TZ環境変数
一部の Linux ディストリビューションは TZ 環境変数を読み取ります。ただし、イメージを使用すると機能しないことに気づきましたcentos:7
。
/etc/ローカルタイム
docker-compose.yml でコンテナをホストにマップできます。ただし、これを行うと、使用するディストリビューションは/etc/localtime
UTCのままになり、それを読み取るソフトウェアは間違ったタイムゾーンを読み取ることになります。/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 を見ると、テキスト ファイルではないことがわかります。