修改 docker 容器时间

需求:

这几天,开发提了个需求 “测试需要模拟未来某天的业务,发现容器里面没有修改时间的权限”,想在我们 k8s 集群上,调整容器时间

解决方案:

使用 --cap-add SYS_TIME

由于在容器中执行指令date +%T -s "18:00:00"会给出date: cannot set date: Operation not permitted的错误。

可以通过添加 --cap-add SYS_TIME 来实现,但是 --cap-add SYS_TIME是为了将宿主机的内核时间挂载进来与容器共享,因此容器时间更改了,宿主机时间也会跟着更改,可能会带来更多的麻烦。所以这个办法不是最优解

使用 libfaketime

libfaketime 该库拦截所有用于检索当前时间和日期的系统调用程序,通过为程序伪造时间和日期,让程序可以看到我修改过的系统时间,而不需要更改真的系统时间

git clone https://github.com/wolfcw/libfaketime.git
cd libfaketime && make install

编译之后装在/usr/local/lib/faketime/libfaketime.so.1

启动时候通过加载环境变量即可

在 docker 中如何使用

FROM registry.cn-beijing.aliyuncs.com/liyongjian5179/centos:jdk8_zh
COPY ./libfaketime.so.1 /usr/local/lib/libfaketime.so.1
ENV LD_PRELOAD=/usr/local/lib/libfaketime.so.1
ENV FAKETIME="+50d"

编译后启动就可以看到时间的变化。

或者还可以容器中编译使用

WORKDIR /
RUN git clone https://github.com/wolfcw/libfaketime.git
WORKDIR /libfaketime/src
RUN make install

启动进程时候设置环境变量

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]

【解决】修改 docker 容器时间与宿主机不同的更多相关文章

  1. docker 容器时间跟宿主机时间同步

    docker 容器时间跟宿主机时间同步 docker cp /etc/localtime 87986863838b:/etc/docker cp /etc/localtime container-na ...

  2. 同步docker中的容器时间和宿主机相同

    同步docker中的容器时间和宿主机相同.cd /etc/ 在容器中修改下/etc/localtime文件的名称,避免冲突. mv localtime localtime_bak cp /usr/sh ...

  3. Docker容器学习梳理 - 容器时间跟宿主机时间同步

    在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,这就需要同步它们的时间,让容器时间跟宿主机时间保持一致.如下: 宿主机时间 [root@slave-1 ~]# date Fri M ...

  4. Docker容器 - 容器时间跟宿主机时间同步

    在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致,这就需要同步它们的时间,让容器时间跟宿主机时间保持一致. 转载自:https://www.cnblogs.com/kevingrac ...

  5. Docker容器时间与宿主机时间不一致的问题

    通过date命令查看时间 查看主机时间   1 2 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时间   1 2 root@ ...

  6. docker容器时间与宿主机时间不一致问题

    该问题是宿主机和容器时去不一致导致的. 把本机时区复制到宿主机即可: docker cp /etc/localtime a9c27487faf4:/etc/localtime 然后重启容器.

  7. Docker容器映射到宿主机只有tcp6没有tcp问题

    问题描述: Docker容器映射到宿主机后,查询端口连接只有tcp6没有tcp,通过ipv4地址连接时无法连接成功. 处理方法: 1.检查是否开启ipv4端口转发 sysctl net.ipv4.ip ...

  8. Docker容器时间与宿主机时间不一致

    编写Dockerfile,在其中加入: RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo ' ...

  9. 【docker】centOS7上部署的mysql和spring boot服务,要求,mysql的时间、java程序服务的时间和宿主机的时间完全保持一致【修改mysql时区,临时和永久】【修改spring boot配置文件时区】【修改docker启动spring boot实例程序时区】

    要求:centOS7上部署的mysql和spring boot服务,要求,mysql的时间.java程序服务的时间和宿主机的时间完全保持一致: ============================ ...

随机推荐

  1. jQuery事件绑定与切换

    一.事件绑定 1.标准方式 1. jquery标准的绑定方式 * jq对象.事件方法(回调函数): * 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为. * 表单对象.submit(); ...

  2. django数据请求

    目录 数据请求: 静态文件加载 form表单 : 数据请求: request方法: 数据请求: 静态文件加载 静态文件加载: 1.默认情况下所有的html文件都是放在templates文件夹内 静态文 ...

  3. DOM操作 三大家族

    clientHeight     获取对象的高度,不计算任何边距.边框.滚动条,但包括该对象的补白.   clientLeft     获取    offsetLeft     属性和客户区域的实际左 ...

  4. nginx 配置参数优化

    nginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求.以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务. worker进程 worker_proc ...

  5. 软件工程1916|W(福州大学)_助教博客】个人总结作业(第12次)成绩公示

    1.作业链接 个人作业--软件工程实践总结作业 https://edu.cnblogs.com/campus/fzu/SoftwareEngineering1916W/homework/3316 2. ...

  6. .netcore使用MimeKit发送邮件

    以163邮箱为例,借助MimeKit nuget安装:MimeKit类库,源码地址:https://github.com/jstedfast/MimeKit 发送方法如下: #region 邮件发送 ...

  7. shell脚本监控k8s集群job状态,若出现error通过触发阿里云的进程监控报警

    #!/bin/bash while [ 1 ] do job_error_no=`kubectl get pod -n weifeng |grep -i "job"|grep -c ...

  8. 【C/C++开发】容器set和multiset,C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

    一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include <set> ...

  9. jquery插件实现瀑布流

    jquery插件实现瀑布流<!DOCTYPE html><html lang="en"><head> <meta charset=&quo ...

  10. flume参数解析+启动参数解析

    flume参数: #example.conf:单节点Flume配置 #命名此代理上的组件 a1.sources = r1 a1.sinks = k1 a1.channels = c1 #描述/配置源 ...