zoukankan      html  css  js  c++  java
  • docker 容器 与 宿主机容器时间问题

    docker 容器 与宿主机容器时间

    docker 容器与宿主机时间同步问题

    容器的默认时间是UTC时间与宿主机的相差8小时

    解决进入容器

     export TZ=Asia/Shanghai  #修改时区
    
    • 创建容器的时候指定启动参数,自动挂载localtime文件到容器内
    docker run --name <name> -v /etc/localtime:/etc/localtime:ro  ....
    
    • 把时区设置加入到Dockerfile中
    # CentOS
    RUN echo "Asia/shanghai" > /etc/timezone;
    # Ubuntu
    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    

    修改容器时间

    测试同学,因为特殊场景,希望更改一下服务对应的容器时间
    启动参数 参加   --cap-add SYS_TIME 
    参考官方文档https://docs.docker.com/engine/reference/run/

    docker run -it --cap-add SYS_TIME --name centos centos:7 /bin/bash 
    

    可以修改了容器时间了, 但是当你修改容器时间 宿主机时间也会随之改变 
    尽管这是在测试环境,宿主机的时间更改可也不是闹着玩的呀

    仅修改docker容器中的时间,而不影响宿主机的时间


    docker 容器都是轻量级的,它们会共享相同的linux内核,而time& date 是kelnel的函数,所有修改docker容器的时间也会造成宿主机时间被修改

    在github上有一个libfaketime项目,我们可以使用LD_PRELOAD这个环境变量使date连接这个项目编译的库来“欺骗”应用,达到修改docker容器时间的目的,具体做法:

    1.pull项目:

    
    mkdir libfaketime && cd libfaketime && git init  
    
    git pull https://github.com/wolfcw/libfaketime.git
    
    
    

    2 使用make命令编译src下的代码,得到动态库文件:/usr/local/lib/faketime/libfaketime.so.1

    3 .运行 docker exec -it <containter_id | containter_name> /bin/bash进入容器

    4 使用如下命令修改程序运行时的链接,并设置时间为2天前。

    export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-2d"
    
    #取消的话, 环境变量设置空
    
    # 时间设置 libfaketime 
    #!/usr/bin/env bash
    export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 
    #export FAKETIME="2020-12-24 20:30:00"  #该时间会一直保持不变
    export FAKETIME="@2020-12-24 20:30:00"  #时间会从这里往后递增
    

    容器修改时间, 把对应的libfaketime.so.1文件拷贝进去容器
    docker cp /usr/local/lib/faketime/libfaketime.so.1 9a5150123100:/usr/local/lib/faketime/
    设置为5天前
    export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-5d"

    #从硬件时间获取
    hwclock
    #硬件时间设置到系统上来
    hwclock -s
    
    
    
    博主QQ 343264992 QQ群交流:100411237 添加时候请备注博客园
  • 相关阅读:
    Oracle Dataguard原理
    [转]TOKUDB® VS. INNODB FLASH MEMORY
    [转]什么是简约设计
    [转]DAS、NAS、SAN存储系统分析
    [转]ocp|ocm考证系列文章!
    [转]数据库范式的设计
    Block Media Recovery, BMR
    [转]开启闪回以及闪回的四种原理
    [转]Oracle DB 执行表空间时间点恢复
    Losing All Members of an Online Redo Log Group
  • 原文地址:https://www.cnblogs.com/chengkanghua/p/11058660.html
Copyright © 2011-2022 走看看