• 【解决】修改 docker 容器时间与宿主机不同


    修改 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]
    
  • 相关阅读:
    常用记录
    golang学习笔记之UDP:server端与client端
    golang学习笔记之tcp简单实现:server端与client端
    golang学习笔记之channel
    golang学习笔记之单元测试和压力测试
    Ubuntu 18.04桌面版安装
    Nas服务器使用xampp修改端口号
    Laravel使用Supervisor管理linux自动队列
    php 设计模式学习笔记之单例模式
    终极二分查找--传说十个人写九个有bug
  • 原文地址:https://www.cnblogs.com/liyongjian5179/p/11957624.html
Copyright © 2020-2023  润新知