首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头集装箱中动态设置系统时间

如何在码头集装箱中动态设置系统时间
EN

Server Fault用户
提问于 2017-01-06 12:48:19
回答 3查看 70.9K关注 0票数 44

是否有任何方法可以在不影响主机的情况下动态设置Docker容器系统时(在运行时)?

使用

代码语言:javascript
复制
hwclock --set --date "Sat Aug 17 08:31:24 PDT 2016"

给出以下错误:

代码语言:javascript
复制
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.

使用

代码语言:javascript
复制
date -s "2 OCT 2006 18:00:00"

给出以下错误:

代码语言:javascript
复制
date: cannot set date: Operation not permitted

用例:

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

其他常见用例:

  • 使用y2k bug运行遗留软件
  • 符合2038年要求的测试软件
  • 调试与时间相关的问题,例如过期的SSL证书。
  • 停止在一定时间范围内运行的软件。
  • 确定性的构建过程。
EN

回答 3

Server Fault用户

回答已采纳

发布于 2017-01-09 12:48:12

是可能的

解决办法是在容器里伪造它。这个库拦截用于检索当前时间和日期的所有系统调用程序。

实现起来很容易。酌情向Dockerfile添加功能:

代码语言:javascript
复制
WORKDIR /
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /libfaketime/src
RUN make install

请记住在运行应用程序之前设置环境变量LD_PRELOAD

示例:

代码语言:javascript
复制
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]

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

示例:

代码语言:javascript
复制
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())
票数 34
EN

Server Fault用户

发布于 2018-08-21 05:53:40

以下是docker-compose解决方案:

/etc/localtime:/etc/localtime:ro添加到volumes属性。

检查这个链接以获得一个示例。

票数 1
EN

Server Fault用户

发布于 2017-01-06 12:57:27

使用附加的环境变量启动容器:

代码语言:javascript
复制
docker run -e "SET_CONTAINER_TIMEZONE=true" \
           -e "CONTAINER_TIMEZONE=US/Arizona" [docker image name]
票数 -1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/824631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档