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 データベースのインデックス順序の詳細な説明

推薦する

ARGB、RGB、RGBAの違いと紹介

ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...

MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

パスワード入力後にMySQLデータベースがクラッシュする問題と解決策1 ケースの説明最近、基本的な機...

入力タイプの制限(複数の方法)

1. 入力・貼り付けできるのは中国語のみ<input onkeyup="value=...

Web デザインにおける HTML フォーマットと長いファイルに関するヒント

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

mysql5.6 以前のデータベースで json をクエリする方法

MySQLにデータを保存するとき、乱雑であまり使用されないデータがJSONフィールドに投げ込まれるこ...

MySQL binlog の解析

目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...

Nginx ドメイン名 SSL 証明書の構成 (Web サイトの http を https にアップグレード)

序文HTTP と HTTPS日常生活でよく使われる URL は、おおまかに次の 2 種類に分けられま...

MySQL オンラインリカバリ UNDO テーブルスペース 実戦記録

1 MySQL5.6 1.1 関連パラメータMySQL 5.6 では、innodb_undo_dir...

MySQLの指定順序ソートクエリについての簡単な説明

最近、空港や駅でフライト情報を表示するものと似た大型スクリーンディスプレイのプロジェクトに取り組んで...

CSS は Alibaba ベクター ライブラリを使用して、対応する位置に見栄えの良いアイコン効果をすばやく追加します (サンプル コード)

Alibaba ベクターアイコンライブラリにアクセスAlibaba ベクターアイコンライブラリ好き...

MySQLのルートパスワードをリセットする最も簡単な方法

私の MySQL バージョンは MYSQL V5.7.9 です。古いバージョンを使用してください: ...

WeChatアプレットはシンプルなサイコロゲームを実装します

この記事では、サイコロゲームを実装するためのWeChatアプレットの具体的なコードを参考までに共有し...

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....