我有一个容器,在tomcat中有一个正在运行的程序.我只需要在此容器中更改日期并测试我的程序行为.我有时间敏感的逻辑,有时需要看看几天或几个月后会发生什么.在码头工具中有可能吗?我读到如果我在容器中更改日期,日期将在主机系统上更改.但对我来说这是一个坏主意.我需要在一台服务器上有一些这个应用程序的实例,并且有可能为每个实例设置不同的时间.
但是当我尝试更改容器内的日期时,我收到错误:
sudo date 04101812
date: cannot set date: Operation not permitted
Fri Apr 10 18:12:00 UTC 2015
Run Code Online (Sandbox Code Playgroud)
Vin*_*oft 37
很有可能动态更改Docker容器中的时间,而不会影响主机操作系统.
解决方案是伪造它.此lib拦截用于检索当前时间和日期的所有系统调用程序.
实施很容易.根据需要向Dockerfile添加功能:
WORKDIR /
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /libfaketime/src
RUN make install
Run Code Online (Sandbox Code Playgroud)
请记住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]
Run Code Online (Sandbox Code Playgroud)
您现在可以动态更改服务器时间:
例:
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())
Run Code Online (Sandbox Code Playgroud)
Aar*_*lla 13
这对Docker来说是不可能的.Docker使用与外部内核相同的时钟.您需要的是完全虚拟化,它模拟完整的PC.
的sudo,因为它只会让你失败root的虚拟环境的容器内.此用户与root主机系统的实际情况无关(除了名称和UID),它无法做真正的root事情.
在使用像Python或Java这样的高级语言时,您经常可以使用钩子来模拟测试的某个系统时间,或者编写包含"从系统获取当前时间"并返回测试所需内容的代码.
这对我有用,也许你可以尝试一下:
dpkg-reconfigure tzdata
编辑:在您遇到问题的容器内执行它.将出现一个界面.在那里你可以编辑时区和本地时间,例如,并正确设置,解决了我的问题,这与你的问题相同.
祝好运!
我创建了一个包含用于 Alpine 的 libfaketime 的 Docker 映像,但该过程可以在其他发行版中完成。
下面是一个使用 Java 的例子,以 Groovy 为例。但是Tomcat也可以使用。
FROM groovy:alpine
COPY --from=trajano/alpine-libfaketime /faketime.so /lib/faketime.so
ENV LD_PRELOAD=/lib/faketime.so \
DONT_FAKE_MONOTONIC=1
Run Code Online (Sandbox Code Playgroud)
然后FAKETIME在执行 docker run 时构建并传递环境变量
docker build -f fakedemo-java.Dockerfile . -t fakedemo
docker run --rm -e FAKETIME=+15d fakedemo groovy -e "print new Date();"
Run Code Online (Sandbox Code Playgroud)
来源在trajano / alpine-libfaketime | Github和docker镜像位于trajano/alpine-libfaketime | 码头枢纽
我还基于 Ubuntu 创建了它的一个变体:trajano / ubuntu-faketime | GitHub
| 归档时间: |
|
| 查看次数: |
31407 次 |
| 最近记录: |