如何修改容器时间而不改变宿主机时间?

需求

有时候需要测试业务程序,把时间指定到一个特定的时间去测试,如何在修改容器时间而不影响宿主机时间

解决方法

GitHub 有一个开源的 libfaketime 项目,能解决这个问题。目前该项目有 1.3k Star。

项目地址

  • https://github.com/wolfcw/libfaketime

支持平台

  • Linux
  • MacOs

安装

注意:必须 sudo make install,否则 libfaketime.dylib.1 没有运行权限,默认安装到 /usr/local/bin/faketime 和 /usr/local/lib/faketime/

# 下载项目$ git clone https://github.com/wolfcw/libfaketime.git# 进入项目$ cd libfaketime# 编译安装$ sudo make && sudo make install

使用

  • 指定动态链接库使用
# 正常时间$ dateMon Mar 26 21:01:46 CST 2019# 设置成三天前时间    $ LD_PRELOAD=/path/to/libfaketime.so.1 FAKETIME="-3d" dateSun Mar 23 21:01:48 CST 2019# 可以通过设置临时 LD_PRELOAD 环境变量$ export LD_PRELOAD=/path/to/libfaketime.so.1# 可以加入到 ~/.bashrc 目录中$ echo "LD_PRELOAD=/path/to/libfaketime.so.1" >> ~/.bashrc# Linux 系统,可以加入到 ld.so.conf 配置中$ echo "/path/to/libfaketime.so.1" >> /etc/ld.so.conf.d/local.conf# 使 local.conf 配置生效$ ldconfig
  • faketime 命令
# 正常时间$ dateMon Mar 26 21:04:42 CST 2019# 修改后时间$ faketime ‘2019-03-27 21:04:52‘ dateTue Mar 27 21:04:52 CST 2019
  • 功能非常强大。更多用法可参考 GitHub 上的说明 https://github.com/wolfcw/libfaketime

原文地址:https://www.cnblogs.com/cheyunhua/p/12047267.html

时间: 2024-10-03 23:33:46

如何修改容器时间而不改变宿主机时间?的相关文章

Docker从容器拷贝文件到宿主机或从宿主机拷贝文件到容器

1.从容器里面拷文件到宿主机? 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js,                     现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢? 答案:在宿主机上面执行命令 docker cp testto

docker容器共享宿主机环境,从而为镜像体积减负

一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的环境就是100多M.有一天突发奇想,容器能不能共用宿主机的环境?这样每次打镜像时体积就会少不少.于是就动手试试了试,结果还真可以,哈哈. 二.测试 我们测试用的是java的web项目做的测试,框架用的springboot,由于集成了tomcat插件,所以web项目打成jar包即可运行. 1.在宿主机

Docker拷贝宿主机与容器中的文件

如果我们需要将宿主机文件拷贝到容器内可以使用 docker cp 命令,也可以将文件从容器内拷贝到宿主机 将宿主机文件拷贝到容器内 docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录 1. 在宿主机上创建一个mengxuegu文件并写入内容 2. 将mengxuegu文件拷贝进 mycentos2 容器中的 /opt 目录下(mycentos2要是UP启动状态) 3. 登录 mycentos2 容器,查看/opt目录下是否有 mengxuegu 文件 从容器内文件拷贝到宿主机

docker 访问宿主机网络

使用宿主机IP 在安装Docker的时候,会在宿主机安装一个虚拟网关docker0,我们可以使用宿主机在docker0上的IP地址来代替localhost. 首先,使用如下命令查询宿主机IP地址: ifconfig 可以发现宿主机的IP是172.17.0.1,那么将proxy_pass http://localhost:1234改为proxy_pass http://172.17.0.1:1234就可以解决502 Bad Gateway错误. 但是,不同系统下宿主机的IP是不同的,例如Linux

docker技术剖析--docker网络(二)docker宿主机之间容器互通

http://hongge.blog.51cto.com/ 多台物理主机之间的容器互联(暴露容器到真实网络中) docker 默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起,如下: 这样就可以把这个网络看成是一个私有的网络,通过 nat 连接外网,如果要让外网连接到容器中,就需要做端口映射,即 -p 参数. 如果在企业内部应用,或则做多个物理主机的集群,可能需要将多个物理

宿主机-免密登录Docker容器

讨论QQ:1586558083 目录 一.检查系统内核 二.安装Docker 2.1 安装 2.2 查看docker版本 2.3 启动docker 三.建立docker用户和组 3.1 创建用户及组 3.2 使用新创建的用户运行helloworld 3.3 解决报错 四.安装centos镜像 4.1 下载镜像 4.2 查看拥有的镜像 4.3 运行容器 4.4 在容器中运行命令 4.5 查看镜像.容器.数据卷所占用的空间 4.6 容器退出再次进入报错 五.运行容器 5.1 使用命令运行容器 六.刚

Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作

由于我是window 10 home 而不是 pro版本,只能使用Docker Toolbox,其实docker for window对windows的支持更好,还有GUI,home版本安装Docker也是极为艰辛.好在我安装好了,但是日常使用也是比pro版的Docker有更多的坑,在此把我踩过的坑,记录下来,惠泽他人. 这个坑是Docker Toolbox在window 10 home 下挂载宿主机目录到容器,愿以为是要在Docker为win10 pro提供GUI里设置与c盘共享,Google

docker容器设置静态IP与宿主机同一网段通信

很早以前弄过docker容器设置静态ip地址以及容器与容器之间通信,用的不多所以没有记录下来. 今天在网上看到个文章关于设置静态ip地址的.就自己实战下.对了还有个pipework也可以设置.. 操作系统环境 [email protected]:~# cat /etc/issue Ubuntu 14.04.3 LTS \n \l 宿主机(系统采用ubuntu-14.04.1-server-amd64)的网络采用桥接模式(默认是DHCP模式,还有一种模式就是静态IP),网桥的网段与物理网段相同.目

Docker 容器与宿主机网段冲突导致网络无法 ping 通的解决方案

docker 容器网络默认使用 bridge 桥接模式,正常情况下,容器会使用 daemon.json 中定义的虚拟网桥来与宿主机进行通讯. 最近更新 Docker for mac 之后,发现以前容器中可以访问的局域网内服务(使用宿主机所在的局域网 IP 访问),变得不可访问了.一开始以为是新版本改了默认网络配置,查了半天 release log 并没有找到相关条目. 后来在同事的帮助下发现问题所在: 由于换了新的工位,宿主机的局域网 IP 网段由 172.16.*.* 切换到了 172.17.