faketime修改docker容器时间

【faketime修改docker容器时间】

准备

1、一个有jdk环境的测试镜像

2、一个可执行测试jar应用

3、faketime工具

github下载地址:https://github.com/wolfcw/libfaketime 

测试验证:

宿主机时间:

进入容器,在libfaketime项目下执行make && make install

默认安装地址 /usr/local/lib/faketime

查看容器时间:

此时执行测试jar:

通过faketime实现:

LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="2019-09-09 09:09:09" FAKETIME_DONT_FAKE_MONOTONIC=1 java -jar test.jar

 到此演示完毕!

有可能会遇到的问题:

在java应用使用fasktime时,可能你会遇到java启动应用被挂起。github官网描述文件有详细描述:

* Java-/JVM-based applications work but you need to pass in an extra argument
  (FAKETIME_DONT_FAKE_MONOTONIC).  See usage basics below for details.  Without
  this argument the java command usually hangs.

需要加FAKETIME_DONT_FAKE_MONOTONIC参数。即 FAKETIME_DONT_FAKE_MONOTONIC=1

因为使用场景原因,我们想要在不停止应用基础上让java程序获取到指定设置时间。按照文档描述,通过file的形式( my-demo-file.tmp)获取自定义时间,当变更文件内时间时,演示执行bash脚本touch -t设置文件时间是立即生效。java应用输出未立即生效。「进fasktime的github项目首页,搜索:Setting FAKETIME by means of a file timestamp」 就可以跳到通过文件设置生效时间了。

具体问题描述:https://github.com/wolfcw/libfaketime/issues/265

猜你喜欢

转载自blog.csdn.net/a910196454/article/details/108501685