我有一个容器,里面有一个正在运行的程序 tomcat。我只需要更改此容器中的日期并测试我的程序行为。我有时间敏感的逻辑,有时需要看看几天或几个月后会发生什么。
在docker中可以吗?我读到,如果我更改容器中的日期,主机系统上的日期也会更改。但这对我来说是个坏主意。我需要在一台服务器上拥有该应用程序的几个实例,并且可以为每个实例设置不同的时间。
但是当我尝试更改容器内的日期时,出现错误:
sudo date 04101812
date: cannot set date: Operation not permitted
Fri Apr 10 18:12:00 UTC 2015
很可能动态更改 Docker 容器中的时间,而不影响主机操作系统。
解决办法就是伪造它。This lib拦截所有用于检索当前时间和日期的系统调用程序。
实施很容易。根据需要向 Dockerfile 添加功能:
WORKDIR /
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /libfaketime/src
RUN make install
记得设置环境变量LD_PRELOAD
在运行您想要应用伪造时间的应用程序之前。
例子:
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]
您现在可以动态更改服务器时间:
例子:
def set_time(request):
import os
import datetime
print(datetime.datetime.today())
os.environ["FAKETIME"] = "2020-01-01" # string must be "YYYY-MM-DD hh:mm:ss" or "+15d"
print(datetime.today())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)