如何在Docker容器中动态设置系统时间

有没有办法动态(在运行时)设置Docker容器系统时间而不影响主机?

运用

hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"

给出以下错误:

hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --debug option to see the details of our search for an access method.

运用

date -s "2 OCT 2006 18:00:00"

给出以下错误:

date: cannot set date: Operation not permitted

使用案例:

我需要测试时间敏感的软件(行为取决于日期).

其他常见用例:

>使用y2k错误运行遗留软件
>符合2038年标准的测试软件
>调试与时间相关的问题,例如过期的SSL证书
>运行的软件停止在特定时间范围之外运行
>确定性构建过程.

最佳答案
有可能的

解决方案是在容器中伪造它. 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]

您现在可以动态更改服务器时间:

例:

import os
def set_time(request):
    print(datetime.today())
    os.environ["FAKETIME"] = "2020-01-01"  # Note: time of type string must be in the format "YYYY-MM-DD hh:mm:ss" or "+15d"
    print(datetime.today())

转载注明原文:如何在Docker容器中动态设置系统时间 - 代码日志