記錄 docker 容器內更改時間的問題-20201028


遇到的問題

1. K8S管理docker容器的項目。

2. 測試需要更改docker容器的時間測試活動等等。

3. docker容器內更改時間會提示:cannot set date Operation not permitted 

 

解決方案   

1. 使用 faketime 的方式修改時間。失敗!!! (貌似需要程序做一些改動才行,后來沒有采用此種方案,但可以學習借鑒一下)

在github上有一個工具可以幫助我們修改容器內的時間:  https://github.com/wolfcw/libfaketime

具體操作,以dockerfile為例

vim Dockerfile  # 准備一個dockerfile文件
FROM alpine:latest

# 此dockerfile文件基於alpine鏡像生成docker鏡像
# 修改軟件鏡像源為阿里鏡像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# 修改時區為上海
RUN apk add -U tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

# 安裝一些必要的軟件
RUN apk add gcc
RUN apk add g++
RUN apk add make
RUN apk add wget 
RUN apk add busybox-extras  # 安裝telnet工具
RUN apk add curl
RUN apk add vim
RUN apk add git

# 安裝容器內更改時間的軟件libfaketime
RUN git clone https://github.com/wolfcw/libfaketime
RUN cd libfaketime/src/ && make && make install

  build 生成鏡像

docker build -t alpine_zuqiu:v1 .

  查看鏡像

docker images

  用該鏡像啟動容器

docker run -it alpine_zuqiu:v1 /bin/sh

  驗證

 

弊端:

1. 根據上述做的容器內修改時間,時間不會走,只是起到一個欺騙程序的作用,需要程序這邊做一些機制才能達到程序識別欺騙時間的目的。

2. 退出當前容器,再進入容器時間還原了,連接docker容器是通過開一個線程去連接,當退出后線程關閉,就沒了。

 

 可以將制作好的鏡像上傳到私有倉庫,大家都可以研究

docker tag alpine_jietouzuqiu:v1 192.168.1.231:80/jtzq/alpine_zuqiu:latest

docker push 192.168.1.231:80/jtzq/alpine_zuqiu:latest

  

綜上所述:后來我們沒有采用這種方法更改docker容器內的時間。

 

最終采用方法:

1. 准備一台或者兩台K8S的node節點,作為測試的專門測試node

2. 將測試需要更改時間驗證的pod,通過K8S標簽的方式和測試服務器綁定在一起。

3. 直接shell連接測試的服務器,使用linux系統命令 date -s “年-月-日 時:分:秒” 的方式更改時間,主機時間更改了,容器內時間自動就會變化。

4. 當測試完畢需要調回東八區的時間,在ntpdate ntp1.aliyun.com和阿里雲時間同步服務器同步為當前時間。

 


免責聲明!

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



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