Dockerコンテナのタイムゾーンと時間の非同期の問題を解決
8564 ワード
今日、システム統合テストでは、業務データの提出時間と実際の時間(北京時間)がずれ、統計異常を招いたため、テストスタッフがテストバグを提出しました.統合テストは、コンテナの時間設定に基づいて、テスト環境としてDockerミラーを直接提供するためです.
渡されたdockerミラーを手に入れた後、起動してコンテナコンソールに入り、dateコマンドで確認するとやはり時間が正しくありません.ホスト時間を再確認すると、コンテナの起動時にホストと同期していないに違いありません.テストミラーはdockfileによって直接構築されているため、問題は基本的にdockerfileファイルに特定されています.
dockerfileチェックを開くと、シンクホストタイムゾーンと同期した設定が確実に失われていることがわかります.ここでは、タイムゾーン同期プロセスをどのように追加するかを記録し、類似の問題に遭遇した学生に参考にします.
次に、Alpineで作成したdockerミラーを例に挙げます(私たちのテストミラーでもあります).
パッケージのインストール時にtzdataインストールパッケージをインストールし、構築に成功した後、このインストールパッケージをクリーンアップできません.
#tzdataインストールパッケージのインストール
&& apk add --no-cache tzdata\
このインストールパッケージをインストールすると、/usr/share/zoneinfoディレクトリの下にタイムゾーン構成情報が生成されます.Alpineディレクトリにはtimezoneおよびlocatime構成はありません.この場合、タイムゾーン値をAlpineのtimezoneおよびlocaltime構成に上書きする必要があります.コマンドは次のとおりです.
これでdockerfileの修正作業は終了しました.
ホストのホスト時間と時間が正しいかどうかを確認するには、次のコマンドを使用します.
これでホストタイムゾーンと時間調整が完了しました.
上記のdockerfileに従ってミラーを再生成し、RUNコマンドを使用してコンテナを起動し、ウィンドウ時間を表示します.
ホストと同期し、調整プロセス全体が終了しました~~
転載先:https://www.cnblogs.com/javacspring/p/6172327.html
渡されたdockerミラーを手に入れた後、起動してコンテナコンソールに入り、dateコマンドで確認するとやはり時間が正しくありません.ホスト時間を再確認すると、コンテナの起動時にホストと同期していないに違いありません.テストミラーはdockfileによって直接構築されているため、問題は基本的にdockerfileファイルに特定されています.
dockerfileチェックを開くと、シンクホストタイムゾーンと同期した設定が確実に失われていることがわかります.ここでは、タイムゾーン同期プロセスをどのように追加するかを記録し、類似の問題に遭遇した学生に参考にします.
次に、Alpineで作成したdockerミラーを例に挙げます(私たちのテストミラーでもあります).
1 Dockerfile修正
1.1 tzdataパッケージの追加
パッケージのインストール時にtzdataインストールパッケージをインストールし、構築に成功した後、このインストールパッケージをクリーンアップできません.
#
ENV TIME_ZONE Asiz/Shanghai
#dockerfile
RUN \
#tzdataインストールパッケージのインストール
&& apk add --no-cache tzdata\
1.2タイムゾーン構成の追加
このインストールパッケージをインストールすると、/usr/share/zoneinfoディレクトリの下にタイムゾーン構成情報が生成されます.Alpineディレクトリにはtimezoneおよびlocatime構成はありません.この場合、タイムゾーン値をAlpineのtimezoneおよびlocaltime構成に上書きする必要があります.コマンドは次のとおりです.
```
RUN \
...
# tzdata
&& apk add --no-cache tzdata \
#
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
これでdockerfileの修正作業は終了しました.
2ホストタイムゾーンおよび時間チェック
ホストのホスト時間と時間が正しいかどうかを確認するには、次のコマンドを使用します.
```
[root@docker ~]# timedatectl
Local time: Tue 2016-12-13 21:52:13 EST
Universal time: Wed 2016-12-14 02:52:13 UTC
RTC time: Wed 2016-12-14 02:52:13
Time zone: America/New_York (EST, -0500) //
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: no
Last DST change: DST ended at
Sun 2016-11-06 01:59:59 EDT
Sun 2016-11-06 01:00:00 EST
Next DST change: DST begins (the clock jumps one hour forward) at
Sun 2017-03-12 01:59:59 EST
Sun 2017-03-12 03:00:00 EDT
#
[root@docker ~]# timedatectl set-timezone Asia/Shanghai
Local time: Wed 2016-12-14 10:53:10 CST
Universal time: Wed 2016-12-14 02:53:10 UTC
RTC time: Wed 2016-12-14 02:53:10
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@docker ~]# date
Wed Dec 14 10:53:49 CST 2016
#
[root@docker ~]# date -s "2016-12-13 21:54:20"
# ,
[root@docker ~]# clock -w
[root@docker ~]# timedatectl
Local time: Tue 2016-12-13 22:59:44 CST
Universal time: Tue 2016-12-13 14:59:44 UTC
RTC time: Tue 2016-12-13 14:59:44
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
```
これでホストタイムゾーンと時間調整が完了しました.
3.構築容器テスト
上記のdockerfileに従ってミラーを再生成し、RUNコマンドを使用してコンテナを起動し、ウィンドウ時間を表示します.
/ # date
Tue Dec 13 23:01:18 CST 2016
ホストと同期し、調整プロセス全体が終了しました~~
転載先:https://www.cnblogs.com/javacspring/p/6172327.html