有没有办法在不影响主机的情况下动态(在运行时)设置 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 证书
- 正在运行的软件在某个时间范围之外停止运行
- 确定性的构建过程。
有可能的
解决方案是在容器中伪造它。这个库拦截所有用于检索当前时间和日期的系统调用程序。
实施很容易。根据需要向 Dockerfile 添加功能:
LD_PRELOAD
请记住在运行要应用伪造时间的应用程序之前设置环境变量。例子:
您现在可以动态更改服务器时间:
例子:
这是
docker-compose
解决方案:添加
/etc/localtime:/etc/localtime:ro
到volumes
属性。检查此链接以获取示例。
使用额外的环境变量启动容器: