docker容器中是否可以更改日期?

新手上路,请多包涵

我在tomcat中有一个运行程序的容器。我只需要在这个容器中更改日期并测试我的程序行为。我有时间敏感的逻辑,有时需要看看几天或几个月后会发生什么。在码头有可能吗?我读到如果我在容器中更改日期,主机系统上的日期将被更改。但这对我来说是个坏主意。我需要在一台服务器上有几个这个应用程序的实例,并且有可能为每个实例设置不同的时间。

但是,当我尝试更改容器内的日期时,出现错误:

 sudo date 04101812
date: cannot set date: Operation not permitted
Fri Apr 10 18:12:00 UTC 2015

原文由 Aleksey Mitskevich 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 726
1 个回答

在不影响主机操作系统的情况下,动态更改 Docker 容器中的时间是很有可能的。

解决方案是伪造它。 这个库 拦截所有用于检索当前时间和日期的系统调用程序。

实施很容易。根据需要向 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())

原文由 Vingtoft 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题