gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:36:43 26 4
gpt4 key购买 nike

我有一个容器,里面有一个正在运行的程序的 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())

关于tomcat - docker容器中是否可以更改日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29556879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com