【解決】修改 docker 容器時間與宿主機不同


修改 docker 容器時間

需求:

這幾天,開發提了個需求 “測試需要模擬未來某天的業務,發現容器里面沒有修改時間的權限”,想在我們 k8s 集群上,調整容器時間

解決方案:

使用 --cap-add SYS_TIME

由於在容器中執行指令date +%T -s "18:00:00"會給出date: cannot set date: Operation not permitted的錯誤。

可以通過添加 --cap-add SYS_TIME 來實現,但是 --cap-add SYS_TIME是為了將宿主機的內核時間掛載進來與容器共享,因此容器時間更改了,宿主機時間也會跟着更改,可能會帶來更多的麻煩。所以這個辦法不是最優解

使用 libfaketime

libfaketime 該庫攔截所有用於檢索當前時間和日期的系統調用程序,通過為程序偽造時間和日期,讓程序可以看到我修改過的系統時間,而不需要更改真的系統時間

git clone https://github.com/wolfcw/libfaketime.git
cd libfaketime  && make install

編譯之后裝在/usr/local/lib/faketime/libfaketime.so.1

啟動時候通過加載環境變量即可

在 docker 中如何使用

FROM registry.cn-beijing.aliyuncs.com/liyongjian5179/centos:jdk8_zh
COPY ./libfaketime.so.1 /usr/local/lib/libfaketime.so.1
ENV LD_PRELOAD=/usr/local/lib/libfaketime.so.1
ENV FAKETIME="+50d"

編譯后啟動就可以看到時間的變化。

或者還可以容器中編譯使用

WORKDIR /
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /libfaketime/src
RUN make install	

啟動進程時候設置環境變量

CMD ["/bin/sh", "-c", "LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME_NO_CACHE=1 python /srv/intercept/manage.py runserver 0.0.0.0:3000]


免責聲明!

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



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