Docker コンテナのタイムゾーン エラーの問題

Docker コンテナのタイムゾーン エラーの問題

背景

node-schedule スケジュール タスク ライブラリを使用して、毎日午前 7 時に自動的にメールを送信し、メールにその日の日付が付与されるスクリプトを作成しました。

質問

メールは午前 7 時ではなく午後 3 時に受信されました。タイムゾーンの設定によるものだと思います。

問題分析と解決策

調査の結果、node-schedule ライブラリはタイムゾーンの選択をサポートしていないため、デフォルトでは世界標準時間 UTC に従って送信されることが判明しました。通常渡す時間は、中国の上海タイムゾーンである CST であり、8 時間異なります。
スケジュールされたタスクライブラリを node-schedule-tz を使用するように変更し、CST タイムゾーンの選択をサポートし、corntab 時間形式を使用するようにしました。

let j = schedule.scheduleJob('name',"0 7 * * *",'アジア/上海', function () {

  console.log("タスクを実行");

  すべてのデータと送信メールを取得します。

});

新たな問題

時刻を変更した後、新たな問題が発生しました。メールで取得された時刻は今日の時刻ではなく、昨日の時刻でした。

問題分析と解決策

考えてみると、コード内に時間を取得する場所が2つあります。1つはスケジュールされたタスクライブラリによって渡される電子メールを送信する時間であり、もう1つはスクリプトで現在の時間を取得することです。

今日 = 新しい Date() とする

今日のログを印刷したので、ログを確認してください

docker logs -f [コンテナID] 
# 今日:2021-11-12T23:00:00.106Z

午前7時に送信したメールが、本日前日の23:00に受信されたことが判明しました。これも8時間違います。次のコマンドを使用してdockerコンテナに入り、時間を確認します

$ docker exec -it [コンテナID] sh
# コンテナに入ると、前面は#になります
# 日付を入力して時刻を表示します # 土 11月13日 05:05:31 UTC 2021

これは確かに UTC 世界標準時であり、つまり、電子メールの送信時刻は実際に戻されていますが、コードが実行されたときに取得される時刻は現在の世界標準時です。
ローカル時間をコンテナ時間にコピーします

docker cp /etc/localtime [コンテナID]:/etc/

上記のようにコンテナ内の時間を再度確認し、CST に戻されていることを確認します。問題はないはずです。

これで、docker コンテナのタイムゾーン エラー問題に関するこの記事は終了です。docker タイムゾーン エラーに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker のタイムゾーンの問題とデータ移行の問題
  • Dockerコンテナのタイムゾーン調整操作
  • Docker でタイムゾーンの問題に対処する方法
  • 作成されたDockerコンテナの時刻表示エラー/日付エラー/タイムゾーンエラー
  • docker タイムゾーンの変更と一般的な docker コマンドの詳細な説明
  • Dockerコンテナのタイムゾーンと時刻同期の問題を解決する方法
  • Docker イメージを作成してコンテナを起動する 2 つの方法の違い (要約)

<<:  Bootstrap 3.0 学習ノート グリッドシステムの原則

>>:  MySQL データベースのインデックス順序の詳細な説明

推薦する

HTML ページで JSON データを表示およびフォーマットする方法

JSONデータはHTMLページ上に表示されフォーマットされます1. 表示効果図説明:すべてのキー値は...

Visual Studio Codeを使用してMySqlデータベースに接続し、クエリを実行します。

Visual Studio Code は、Microsoft が開発した強力なテキスト エディター...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

見栄えの良い CSS カスタム スタイル (タイトル h1 h2 h3)

レンダリングBlog Gardenでよく使われるスタイル /*タイトル h1 h2 h3 スタイル*...

MySQL 8.0.11 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...

Vueプロジェクトでパラメータジャンプ機能を実装する

ページの説明:​ メインページ: 名前 —> shishengzuotanhuichaxun ...

Linux に nginx をインストールする方法

Nginx は C 言語で開発されており、Linux で実行することをお勧めします。もちろん、Win...

MySQL でタイムスタンプを日付に変換する例

序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...

ウェブデザインにおける画像フォーマットとデザインの関係を詳しく説明

なぜこの領域のコンテンツを整理したいのでしょうか。それは、油絵の具とキャンバスを理解する必要があり、...

歴史的な Linux 画像処理および修復ソリューション

従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...

Deepin Linuxでカーネルを手動でアップグレードする方法

deepinとUbuntuどちらもdebianをベースにしたディストリビューションであり、ここではU...

仮想マシンクローン Linux centos6.5 システム ネットワーク カード構成グラフィック チュートリアル

Linux システムに触れたばかりの初心者として、VMware 仮想マシンに CentOS6.5 シ...

ウェブフロントエンド開発者が知っておくべき 9 つの実用的な CSS プロパティ

1. 角を丸くする今日の Web デザインは、常に最新の開発テクノロジーに追随しており、HTML5 ...

CSS における z-index: 0 と z-index: auto の違い

最近、スタック コンテキストについて学習しています。学習の過程で、z-index が 0 の場合と ...

Apache ストレステストツールのインストールと使用

1. ダウンロードApacheの公式サイトhttp://httpd.apache.org/にアクセス...