container 設定時區整理小記
OS: openSUSE Leap 15.3
這篇文章的起因是因為在測試 zabbix 經由 telegram 推送通知時
發現通知時間的部份是使用 UTC time, 如果想要收到通知的時候上面的時間符合目前的時間
想法上解法有 2 個方向
使用自訂訊息的部份, 標示 Problem started 時間為 UTC
將 container 內的時區訂為自己所在地區的時區
今天這篇文章就是整理將 container 內的時區設定為目前時區的小記
先整理一下實體主機 openSUSE Leap 15.3 時區相關資訊
系統預設時區設定觀察
# cat /etc/sysconfig/clock
DEFAULT_TIMEZONE="US/Eastern"
本地時區設定觀察
# ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Nov 28 2021 /etc/localtime -> ../usr/share/zoneinfo/Asia/Taipei
現在的作業系統可以使用 timedatectl 來觀察相關設定
# timedatectl
Local time: Sun 2022-06-19 08:17:36 CST
Universal time: Sun 2022-06-19 00:17:36 UTC
RTC time: Sun 2022-06-19 00:17:36
Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
不同的作業系統可能會採取 /etc/localtime 或是 /etc/timezone 的方式, 可以參考網路上找到的文章 http://www.freekb.net/Article?id=965
當然在 openSUSE 內, 最方便的作法就是使用
# yast2 timezone 來設定 :)
接下來回到 container 的部份
參考網路上的文章
原則上可以使用 -e TZ=Asia/Taipei 方式來設定 container 內的時區
但是前題是要安裝相關套件, 整理如下
openSUSE
安裝 timezone 套件
有 tzselect 指令可以執行
CentOS
安裝 tzdata
Ubuntu
安裝 tzdata
實際驗證
> docker run -it opensuse/leap:15.3 /bin/bash
dfc4994abd1d:/ # date
Sun Jun 19 00:30:22 UTC 2022
> docker run -it -e TZ=Asia/Taipei opensuse/leap:15.3 /bin/bash
940407fada80:/ # date
Sun Jun 19 00:31:39 Asia 2022
這邊可以觀察到, 雖然傳遞 -e TZ=Asia/Taipei, 目前顯示的時間還不是 local time
預設沒有裝 timezone 套件, 然後容器內也沒有 /etc/localtime 檔案
嘗試自己來建立 container image 測試
以下是 Dockerfile 內容
FROM opensuse/leap:15.3
RUN zypper install -y timezone
建立 container image
> docker build -t sakana/testtimezone2 .
再次測試
> docker run -it sakana/testtimezone2 /bin/bash
23460ce0b35f:/ # date
Sun Jun 19 00:37:43 UTC 2022
傳入時區
> docker run -it -e TZ=Asia/Taipei sakana/testtimezone2 /bin/bash
7c48052f9d9e:/ # date
Sun Jun 19 08:38:42 CST 2022
這邊就可以發現時間顯示已經變成我們傳入的 Asia/Taipei
另外 centos:7 以及 ubuntu:latest 的 container image 我也測試過 ( 如果有安裝 tzdata 套件就可以設定時區 )
先記下來
~ enjoy it
Reference
沒有留言:
張貼留言