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

推薦する

優れたグラフィックデザイナーが習得すべき7つのスキル

1》ウェブデザインが得意であること2》Webページのデザイン方法を知る3》計画する4. SEOを理解...

Nginx+Tomcat 負荷分散クラスタのインストールと構成のケースの詳細な説明

目次序文1. Nginx+Tomcat 2. Nginxサーバーを構成する3. Tomcatアプリケ...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

crontab 実行時間とシステム時間の不一致の解決方法

序文LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...

JS は Web ページナビゲーションバーの特殊効果を実現します

この記事では、ネイティブ JS を使用して実装された実用的な Web ナビゲーション バー効果を紹介...

nginxカスタム変数と組み込み定義済み変数の使用

概要Nginx では変数を使用して設定を簡素化し、設定の柔軟性を向上させることができます。すべての変...

高度な CSS の 3 つの方法を使用して複数行の省略を実装するサンプル コード

序文これは古くからの要望ですが、オンラインで解決策を探している人はまだ多く、特に検索結果の上位にラン...

MySQLに絵文字表現を保存する詳細な手順

原因: java.sql.SQLException: 列の文字列値が正しくありません: '\...

Dockerコミットの使い方の詳しい説明

場合によっては、ベースイメージに特定の依存関係をインストールする必要があります。Dockerfile...

CSS (カスケーディング スタイル シート) の一般的な用語の概要

CSS を使用する場合は、DOCTYPE (ドキュメント タイプ定義) を記述することを忘れないでく...

Linux の EXT シリーズファイルシステムフォーマットの詳細な説明

Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...

Webデザインの経験:ナビゲーションシステムをシンプルにする

<br />友人と話し合っていたとき、フレームワークのレイヤー設計の中で最も核となるのは...

MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ

一般的に、MySQL はデフォルトでさまざまなストレージ エンジンを提供しており、次のように表示され...

JavaScript es6 における var、let、const の違いの詳細な説明

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか? ECMAS...

この記事では、Vue 3.0 レスポンシブの使い方を説明します。

目次ユースケースリアクティブAPI関連プロセス反応的なcreateReactiveObjectはレス...