1. 程式人生 > 其它 >修改Docker容器中的時區的簡便方法

修改Docker容器中的時區的簡便方法

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 bash
ln -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安裝

[2]. Docker修改容器中的時間 - battor - 部落格園