Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間違っていることに気付きました。JDK を使用して現在の時刻を取得すると、標準のタイムゾーンよりも 8 時間遅くなりました。

解決:

解決策1. Dockerfileを変更する

Alpine Linux システムのタイムゾーンを設定します。Alpine Linux のドキュメントを参照して、tzdata パッケージを通じてタイムゾーンを設定できることを学んでください。Docker イメージをビルドするときに、次の文を Dockerfile に追加します。

apk --update add tzdata && \ を実行します。
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "アジア/上海" > /etc/timezone && \
    apk から tzdata && \
    rm -rf /var/cache/apk/*

完全なDockerfile

openjdk:8-jre-alpine3.9 より

apk --update add tzdata && \ を実行します。
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "アジア/上海" > /etc/timezone && \
    apk から tzdata && \
    rm -rf /var/cache/apk/*

# パッケージ化されたjarファイルをdockerイメージにコピーします
application.jar /application.jar をコピーします

ドキュメントリンク:

wiki.alpinelinux.org/wiki/設定…

解決策2. JVMのシステムのデフォルトタイムゾーンを設定する

Dockerイメージを起動するときに、user.timezone JVM環境変数を設定してタイムゾーンを設定します。

java -jar -Duser.timezone=Asia/Shanghai app.jar

解決策3. ホストマシンのタイムゾーンファイルをDockerコンテナにマウントする

クラスター ソリューションは K8S を使用します。デプロイするときに、ホストのタイム ゾーン ファイルを Docker コンテナーにマウントします。

APIバージョン: アプリ/v1
種類: デプロイメント
メタデータ:
  名前: SERVICE_NAME
仕様:
  レプリカ: 1
  セレクタ:
    一致ラベル:
      アプリ: SERVICE_NAME
  テンプレート:
    メタデータ:
      ラベル:
        アプリ: SERVICE_NAME
    仕様:
      コンテナ:
      - 名前: SERVICE_NAME
        画像: IMAGE_TAG
        imagePullPolicy: 常に
        ポート:
        - コンテナポート: 80
      	ボリュームマウント:
        - 名前: tz-config
          マウントパス: /etc/localtime
      ボリューム:
      - 名前: tz-config
        ホストパス:
           パス: /etc/localtime

正常に動作しているか確認する

日付 -R

参考資料:

docker-apli… を参照してください。

blog.csdn.net/jeikerxiao/…

Docker Alpine イメージのタイムゾーン問題を解決するこの記事はこれで終わりです。Docker Alpine イメージのタイムゾーンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Alpine Dockerイメージフォント問題解決操作
  • alpineをベースにdockerfileで作成したtomcatイメージの実装
  • alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装
  • Docker で php-nginx-alpine イメージをゼロから構築する方法

<<:  さまざまなブラウザでのhrタグの説明

>>:  MySQL の時間設定に関する考慮事項の詳細な要約

推薦する

Vue ElementUI は非同期読み込みツリーを実装します

この記事の例では、vue ElementUI の非同期読み込みツリーを実装するための具体的なコードを...

Tomcatアーキテクチャの原則をアーキテクチャ設計に分析する

目次1. 学習目標1.1. Tomcatアーキテクチャの設計と原則をマスターして社内スキルを向上させ...

Linux で特定のユーザーまたはユーザー グループに対して SSH を有効または無効にする方法

会社の基準により、特定のユーザーだけに Linux システムへのアクセスを許可することができます。あ...

MySQLのスペースをクリーンアップするいくつかの具体的な方法

目次序文1. ファイルのディスク使用量を確認する1.1 ディスク容量の使用状況を確認する1.2 ディ...

Dockerがコンテナを起動するたびに、IPとホストが指定した操作が実行されます。

序文Dockerを使ってHadoopクラスタを起動するたびに、ネットワークカードの再バインド、IPの...

Ubuntu 19.04 インストール チュートリアル (画像とテキストの手順)

1. 準備1.1 VMware 15 をダウンロードしてインストールするダウンロード リンク: h...

nginxサーバーのダウンロード、インストール、使用方法の詳細な説明

ダウンロードhttp://nginx.org/en/download.html解凍ダウンロードしたn...

MySQL データベースは XA 仕様をどのように実装しますか?

MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...

vue + Electron でデスクトップ アプリケーションを作成するためのサンプル コード

1.vueパッケージングここでは、vueネイティブパッケージングコマンドを使用してvueプロジェクト...

MySQL の null 可能フィールドは NULL に設定する必要がありますか、それとも NOT NULL に設定する必要がありますか?

MySQL を頻繁に使用する人は、次のような状況に遭遇する可能性があります。 1. フィールド タ...

静的ウェブサイトをRSSに変換するツール

<br /> この記事は allwebdesignresources.com から Ra...

MySQL 増分バックアップとブレークポイントリカバリスクリプトの例

導入増分バックアップとは、完全バックアップまたは最後の増分バックアップの後、後続の各バックアップでは...

nginx + php の「入力ファイルが指定されていません」の解決策

本日、ローカル開発環境で突然「入力ファイルが指定されていません」というエラーが発生してしまいました。...

Windows Server 2008R2、2012、2016、2019 の違い

目次共通バージョンの紹介共通バージョンのダウンロードアドレスとインストール以下に簡単な違いを示します...

Mac でソースコードから MySQL 5.7.17 をコンパイルしてインストールするチュートリアル

1. ダウンロードして解凍します: /Users/xiechunping/Softwares/mys...