Linux怎么查询全部容器时间,linuxea:如何单单修改docker容器的系统时间

5c1967c5325842cec010c6abd3e07965.gif

一般情况下,我们仅仅需要修改容器的时间与我们宿主机的实际实际一致即可,

我们知道,默认情况下docker容器是不允许访问系统时钟,但是有一款开源的软件使这样的需求变成了可能。此lib拦截用于检索当前时间和日期的所有系统调用,完成了容器内时间的修改。

阅读此篇文章,你将了解在容器内修改时间的方法。

I. 使用

以alpine为例,我们进行编译安装,并挑选几个简单的使用方法来进行演示这个时间调整

git clone https://github.com/wolfcw/libfaketime.git

cd libfaketime/src

make install

他的使用非常简单,只需要设置环境变量即可,如下

bash-4.4$ date

Fri Mar 8 15:17:52 CST 2019

修改天数

bash-4.4$ LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-2d"

bash-4.4$ date

Wed Mar 6 15:28:03 CST 2019

修改分钟

bash-4.4$ LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="-70m"

bash-4.4$ date

Fri Mar 8 14:18:45 CST 2019

虚拟时间的默认规范是缓存的,时间为10秒钟

FAKETIME_NO_CACHE =1是禁用缓存,但这可能带来性能影响

II. 嵌入docker基础镜像中

使用此前的基础镜像。在启动脚本中添加TIME_OFFSET变量,顺便修改启动容器进程的id和用户名

#!/bin/bash

#########################################################################

# File Name: entrypoint.sh

# Author: www.linuxea.com

# Created Time: Tue 05 Mar 2019 03:59:05 PM CST

#########################################################################

USER_ID=${USER_ID:-1101}

USER_NAME=${USER_NAME:-www}

TIME_OFFSET=${TIME_OFFSET:-FAKETIME_NO_CACHE=1 FAKETIME=""}

echo "Starting with UID : $USER_ID And user $USER_NAME"

addgroup --gid $USER_ID $USER_NAME

adduser -u $USER_ID -S -H -s /bin/bash -g $USER_NAME -G $USER_NAME $USER_NAME -D

# useradd --shell /bin/bash -u $USER_ID -o -c "" -m user

export HOME=/home/$USER_NAME

export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 $TIME_OFFSET

exec /usr/local/bin/gosu $USER_NAME "$@"

这样以来,在下次启动的时候,传递环境变量就达到了修改容器时间的办法

我将次镜像构建为marksugar/alpine:3.9-time-gosu,你可以下载进行使用

[root@linuxea.com /opt/2019/djd/jj]# docker build -t marksugar/alpine:3.9-time-gosu .

现在我们进行测试这个时间修改

挂载/etc/localtime让容器时间与机器时间一致,而后在进行传递$TIME_OFFSET修改时间的偏移量

docker run \

--rm \

-v /etc/localtime:/etc/localtime \

-e TIME_OFFSET=FAKETIME="-10m" \

-e USER_ID=1101 \

-e USER_NAME=linuxea.com \

-it marksugar/alpine:3.9-time-gosu \

date +%F" "%T

我们先取出时间

[root@linuxea.com ~]# date +%F" "%T

2019-03-08 15:54:11

而后修改分钟,减去10分钟,-10m

[root@linuxea.com ~]# docker run \

> --rm \

> -v /etc/localtime:/etc/localtime \

> -e TIME_OFFSET=FAKETIME="-10m" \

> -e USER_ID=1101 \

> -e USER_NAME=linuxea.com \

> -it marksugar/alpine:3.9-time-gosu \

> date +%F" "%T

Starting with UID : 1101 And user linuxea.com

2019-03-08 15:44:16

时间从2019-03-08 15:54:11变成2019-03-08 15:44:16

修改天数,减去3天,-3d

[root@linuxea.com ~]# docker run \

> --rm \

> -v /etc/localtime:/etc/localtime \

> -e TIME_OFFSET=FAKETIME="-3d" \

> -e USER_ID=1101 \

> -e USER_NAME=linuxea.com \

> -it marksugar/alpine:3.9-time-gosu \

> date +%F" "%T

Starting with UID : 1101 And user linuxea.com

2019-03-05 15:57:43

或者这样

docker run \

--rm \

-v /etc/localtime:/etc/localtime \

-e TIME_OFFSET=FAKETIME="-10m" \

-e USER_ID=1101 \

-e USER_NAME=linuxea.com \

-it marksugar/alpine:3.9-time-gosu \

date +%F" "%T

FAKETIME_NO_CACHE=1

[root@DT_Node-172_17_0_1 ~]# date +%F" "%T

2019-03-08 16:03:18

[root@DT_Node-172_17_0_1 ~]# docker run \

> --rm \

> -v /etc/localtime:/etc/localtime \

> -e TIME_OFFSET="FAKETIME_NO_CACHE=1 FAKETIME="-10m"" \

> -e USER_ID=1101 \

> -e USER_NAME=linuxea.com \

> -it marksugar/alpine:3.9-time-gosu \

> date +%F" "%T

Starting with UID : 1101 And user linuxea.com

2019-03-08 15:53:18

III. 更多阅读

IV. 学习更多

学习如何使用Docker CLI命令,Dockerfile命令,使用这些命令可以帮助你更有效地使用Docker应用程序。查看Docker文档和我的其他帖子以了解更多信息。

除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可

本文作者:www.linuxea.com for Mark

文章链接:http://www.linuxea.com/2316.html (转载请注明本文出处和本章链接)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关闭系统索引(转)

转自“http://jingyan.baidu.com/article/d621e8daeaaa392865913f0a.html” 关闭系统索引 Windows索引服务是为文件、电子邮件和其他内容提供内容索引、属性缓存和搜索结果。 Windows系统在安装完成后,会逐步创建特定文件、文件夹和其它目标的索引,例如开…

Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF

JNIEnv是指向可用JNI函数表的接口指针,原生代码通过JNIEnv接口指针提供的各种函数来使用虚拟机的功能。JNIEnv是一个指向线程-局部数据的指针,而线程-局部数据中包含指向线程表的指针。实现原生方法的函数将JNIEnv接口指针作为它们的第一个参数。 原生代…

最佳新秀Java(22)——再次了解泛型

仿制药Java SE 1.5新功能。通用自然是参数化类型。即操作数据类型被指定为一个参数。这样的参数类型可以在课堂上使用、创建的接口和方法,他们被称为通用类、、泛型方法。Java语言引入泛型的优点是安全简单。规则和限制1、泛型的类型參数仅仅能是类类型(…

如何编译 dotnet/aspnetcore 源代码

前言最近,准备为 dotnet/aspnetcore 修改 issue,但是在 clone 代码后,发现要编译成功,远没有想象中那么容易。因此,将整个过程进行记录,以供大家参考。以下操作都是在 Windows 10 下完成。0.环境准备详见官…

查看Linux进程CPU过高具体的线程堆栈(不中断程序)

转自:http://blog.csdn.net/mergerly/article/details/47731305 1、TOP命令,找到占用CPU最高的进程 [plain] view plaincopy $ top top - 20:11:45 up 850 days, 1:18, 3 users, load average: 1.04, 1.01, 0.99 Tasks: 61 total, 1 running, …

linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...

Linux工具链for TKStudio是一款支持TKStudio IDE集成开发环境的辅助LINUX交叉编译工具链软件,交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况)。所以这个时候就需要交叉编译工具链。译工具链一般最简化的为 binutils gcc glibc …

pom.xml配置详解

http://blog.csdn.net/uohzoaix/article/details/7035307转载于:https://www.cnblogs.com/friends-wf/p/3829580.html

Android之在Activity中动态得到Adapter类中数据

1、问题 Activity中动态得到Adapter数据2、解决办法 在Adapter中写入接口Class Adapter {Interface A {void onClick(int a, int b);}A a;public void setListen (A a) {this.a a;}public void A (int a, int b) {if (a ! null ) {a.onClick(a, b);}}} class MainActivity ex…

Convolutional Neural Networks for Visual Recognition 1

Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程。这个课程重点介绍了deep learning里的一种比较流行的模型:Convolutional Neural Networks,简称CNN,主要利用CNN来做visual r…

记一次 .NET 某供应链WEB网站 CPU 爆高事故分析

一:背景 1. 讲故事年前有位朋友加微信求助,说他的程序出现了偶发性CPU爆高,寻求如何解决,截图如下:我建议朋友用 procdump 在 cpu 高的时候连抓两个dump,这样分析起来比较稳健,朋友也如期的成功…

html5做的太阳系

效果图&#xff1a; 源代码&#xff1a; <!DOCTYPE html><html><head><meta charset"UTF-8"> <title></title></head><body><canvas id"canvas" width"1000" height"1000" style&…

html中#include file的使用方法

有两个文件a.htm和b.htm&#xff0c;在同一文件夹下a.htm内容例如以下 <!-- #include file"b.htm" --> b.htm内容例如以下 今天&#xff1a;雨 31 ℃&#xff5e;26 ℃ <br />明天&#xff1a;雷阵雨 33 ℃&#xff5e;27 ℃ 直接在浏览器中打开a&#…

Android之第一次不显示EditText光标

1、问题 光标会默认显示在第一个EditText框中&#xff0c;如果不想显示光标&#xff0c;且也不想把该光标移动到下一个EditText框。2、解决办法 在该 EditText之前增加一个不可见的LinearLayout<LinearLayout android:focusable"true"android:focusableInTouchMod…

读取bmp图片数据

1 public void getBMPImage(String source) throws Exception {2 3 clearNData(); //清除数据保存区4 FileInputStream fs null;5 6 try {7 fs new FileInputStream(source);8 int bfLen 14;9 …

Windows 11 任务管理器重磅升级!界面迎来全新设计,十年来首次大改!

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软近日发布了 Windows 11 预览版 Build 22557。在此版本中&#xff0c;任务管理器迎来了全新的设计&#xff0c;这是其自 Windows 8 以来的首次变更&#xff0c; 也是任务管理器十年来最大的一次升级。史诗级更新&#xff0…

modbus调试工具 linux,linux libmodbus的移植

1.前言Modbus是一个工业通信系统&#xff0c;由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。2.移植步骤第一&#xff0c;进入libmodbus目录下&#xff0c;在交叉编译器是最好…

Android之用 ExpandableListView使用解析(三级列表的实现)

&#xfeff;&#xfeff;Android之用 ExpandableListView使用解析&#xff08;三级列表的实现&#xff09; 下载地址如下&#xff1a;http://download.csdn.net/download/u011068702/9839848

微博自媒体,一个新的生态

昨日&#xff0c;微博、UC和360&#xff0c;三方宣布将联合打造自媒体平台&#xff0c;这是继微信公众平台、搜狐新闻客户端、百度百家、今日头条之后的又一大自媒体平台。自媒体平台之争正愈演愈烈&#xff0c;而这对自媒体人和读者来说都算是好事。为何巨头们钟爱自媒体起初微…

开发者说PaddleOCR的.NET封装与应用部署

本项目是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同时针对小图识别不准的情况下&#xff0c;做了优化&#xff0c;提高识别准确率。项目包含总模型仅8.6M的超轻量级中文OCR&#x…

转载 雨松mono Unity获取游戏对象详解(来自我的长微博)

Unity获取游戏对象详解&#xff08;来自我的长微博&#xff09; 转载 自 雨松mono 本文固定链接: http://www.xuanyusong.com/archives/2768转载请注明: 雨松MOMO 2014年06月16日 于 雨松MOMO程序研究院 发表我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样&a…