docker 容器 與 宿主機容器時間問題


docker 容器 與宿主機容器時間

docker 容器與宿主機時間同步問題

容器的默認時間是UTC時間與宿主機的相差8小時

解決進入容器

 export TZ=Asia/Shanghai  #修改時區
  • 創建容器的時候指定啟動參數,自動掛載localtime文件到容器內
docker run --name <name> -v /etc/localtime:/etc/localtime:ro  ....
  • 把時區設置加入到Dockerfile中
# CentOS
RUN echo "Asia/shanghai" > /etc/timezone;
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改容器時間

測試同學,因為特殊場景,希望更改一下服務對應的容器時間
啟動參數 參加   --cap-add SYS_TIME 
參考官方文檔https://docs.docker.com/engine/reference/run/

docker run -it --cap-add SYS_TIME --name centos centos:7 /bin/bash 

可以修改了容器時間了, 但是當你修改容器時間 宿主機時間也會隨之改變 
盡管這是在測試環境,宿主機的時間更改可也不是鬧着玩的呀

僅修改docker容器中的時間,而不影響宿主機的時間


docker 容器都是輕量級的,它們會共享相同的linux內核,而time& date 是kelnel的函數,所有修改docker容器的時間也會造成宿主機時間被修改

在github上有一個libfaketime項目,我們可以使用LD_PRELOAD這個環境變量使date連接這個項目編譯的庫來“欺騙”應用,達到修改docker容器時間的目的,具體做法:

1.pull項目:


mkdir libfaketime && cd libfaketime && git init  

git pull https://github.com/wolfcw/libfaketime.git


2 使用make命令編譯src下的代碼,得到動態庫文件:/usr/local/lib/faketime/libfaketime.so.1

3 .運行 docker exec -it <containter_id | containter_name> /bin/bash進入容器

4 使用如下命令修改程序運行時的鏈接,並設置時間為2天前。

export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-2d"

#取消的話, 環境變量設置空

# 時間設置 libfaketime 
#!/usr/bin/env bash
export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 
#export FAKETIME="2020-12-24 20:30:00"  #該時間會一直保持不變
export FAKETIME="@2020-12-24 20:30:00"  #時間會從這里往后遞增

容器修改時間, 把對應的libfaketime.so.1文件拷貝進去容器
docker cp /usr/local/lib/faketime/libfaketime.so.1 9a5150123100:/usr/local/lib/faketime/
設置為5天前
export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-5d"

#從硬件時間獲取
hwclock
#硬件時間設置到系統上來
hwclock -s



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM