Linux怎么查询全部容器时间,linuxea:如何单单修改docker容器的系统时间
一般情況下,我們僅僅需要修改容器的時間與我們宿主機的實際實際一致即可,
我們知道,默認情況下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 (轉載請注明本文出處和本章鏈接)
總結
以上是生活随笔為你收集整理的Linux怎么查询全部容器时间,linuxea:如何单单修改docker容器的系统时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 编译指cpu内核,linux
- 下一篇: linux 编译工具链,Linux工具链