【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」 就可以跳到通过文件设置生效时间了。