修改Docker容器中的時區的簡便方法
阿新 • • 發佈:2022-03-31
1. 問題
在使用 Docker 建立的 Ubuntu 容器中,偶然檢視新建檔案的時間和宿主機系統時間差了有8個小時,
2. 解決方案
根據經驗,判斷是時區沒有選擇對,執行命令 data -R 發現,果然如此。
root@5a4f037d5c3d:~# date -R Thu, 31 Mar 2022 01:39:49 +0000
+0000 代表就是當前系統為0時區。
由於Ubuntu容器中沒有介面,不能圖形化修改時區,查詢資料可以使用 tzselect 命令修改時區。
執行 tzselet 如下:
root@5a4f037d5c3d:~# tzselect /usr/bin/tzselect: line 180: /usr/share/zoneinfo/iso3166.tab: No such file or directory/usr/bin/tzselect: time zone files are not set up correctly
看來是缺少了時區檔案,那麼時區檔案從哪兒來呢?
再次查詢資料,發現可以通過 apt install tzdata 進行安裝時區,有很多時區可供選擇。
但是,如果不想要使用那麼多的時區怎麼辦呢,再次查詢資料找到了一個簡單的,不需要在docker中安裝 tzdata 的方式。
就是直接拷貝需要的時區資料,再進行軟連結就可以了。執行命令如下:
# step1. 進入容器中 建立資料夾 # 注意:只有執行時候 docker run -dit 的容器才可以進入容器的shell操作 docker exec-it test bash # 由於沒有安裝tzdata的系統沒有這個資料夾 需要建立 # -p 因為沒有zoneinfo父路徑,所以需要同時建立父子路徑 mkdir -p /usr/share/zoneinfo/Asia # step2. 宿主機中拷貝時區檔案到容器中 # test 是筆者測試用的容器名 # 筆者需要的東八區上海的時區檔案,如果需要其他的可以相應改動 docker cp /usr/share/zoneinfo/Asia/Shanghai test:/usr/share/zoneinfo/Asia/Shanghai # step3. 再次進入容器 執行軟連結建立 docker exec -it test bashln -sf /usr/share/zoneinfo/Asia/Shanghai # step4. 驗證 root@5a4f037d5c3d:~# date -R Thu, 31 Mar 2022 09:58:32 +0800
值得一提的是,筆者的宿主機是ubuntu系統,所以可以直接拷貝。如果是windows系統,建議從其他地方拷貝,或者 apt install tzdata --no-install-recommends 先安裝,再 apt remove tzdata 解除安裝。
--no-install-recommends 是為了最小化安裝,不安裝不必要的包。
3. 參考文獻
[1]. 在自動化運維中設定apt-get install tzdata的noninteractive方法_易生一世的部落格-CSDN部落格_tzdata安裝