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

推薦する

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

HTML テーブル マークアップ チュートリアル (48): CSS で変更されたテーブル

<br />では、CSS 構文を巧みに使用してテーブルを美しくする方法を見てみましょう。...

よくあるNginxの設定ミスの例

目次ルートの場所が見つかりませんオフバイスラッシュ安全でない変数の使用スクリプト名$uri を使用す...

CentOS 6.2 に MySQL 5.7.28 をインストールするチュートリアル (mysql ノート)

1. 環境整備1.MySQLインストールパス: /usr/local 2. CentOS 6.2 ...

CSS で「プラス記号」効果を実装するためのサンプルコード

以下に示すプラス記号の効果を実現するには: この効果を実現するには、div 要素だけが必要です。 b...

MySQL Workbench の使い方チュートリアルの詳しい説明

目次(I) Workbenchを使用してデータベースを操作する①データベースを作成する② データベー...

mysqlreplicate を使って MySQL マスタースレーブを素早く構築する方法

導入mysql-utilities ツールセットは、DBA のツールボックスとも言えるさまざまなツー...

Vue が scss (mixin) をグローバルに導入

目次1. ミックスイン.scss 2. 単一ファイルの使用3. グローバルマウント3.1 依存関係の...

Linux CentOS でスケジュールされたバックアップ タスクを設定する方法

実装準備 # ファイルパスをバックアップする必要があります: /opt/apollo/logs/ac...

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...

MySQL から Excel にテーブルデータをエクスポートする際の日時形式に関する簡単な説明

最近、MySQL を使用してテーブル データを Excel ファイルにエクスポートしました。MySQ...

Linux オペレーティング システムでよく使用される MySQL コマンドの概要

以下に、一般的な MySQL コマンドをいくつか示します。 -- データベース サービスを開始します...

行間隔が広い場合の解決策(IE では 5 ピクセル多い)

コードをコピーコードは次のとおりです。 li {幅:300px; 高さ:23px; 行の高さ:24p...