记录 docker 容器内更改时间的问题-20201028

遇到的问题

1. K8S管理docker容器的项目。

2. 测试需要更改docker容器的时间测试活动等等。

3. docker容器内更改时间会提示:cannot set date Operation not permitted 

 

解决方案   

1. 使用 faketime 的方式修改时间。失败!!! (貌似需要程序做一些改动才行,后来没有采用此种方案,但可以学习借鉴一下)

在github上有一个工具可以帮助我们修改容器内的时间:  https://github.com/wolfcw/libfaketime

具体操作,以dockerfile为例

1
vim Dockerfile  # 准备一个dockerfile文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FROM alpine:latest
 
# 此dockerfile文件基于alpine镜像生成docker镜像
# 修改软件镜像源为阿里镜像
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
 
# 修改时区为上海
RUN apk add -U tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
 
# 安装一些必要的软件
RUN apk add gcc
RUN apk add g++
RUN apk add make
RUN apk add wget
RUN apk add busybox-extras  # 安装telnet工具
RUN apk add curl
RUN apk add vim
RUN apk add git
 
# 安装容器内更改时间的软件libfaketime
RUN git clone https://github.com/wolfcw/libfaketime
RUN cd libfaketime/src/ && make && make install

  build 生成镜像

1
docker build -t alpine_zuqiu:v1 .

  查看镜像

1
docker images

  用该镜像启动容器

1
docker run -it alpine_zuqiu:v1 /bin/sh

  验证

 

弊端:

1. 根据上述做的容器内修改时间,时间不会走,只是起到一个欺骗程序的作用,需要程序这边做一些机制才能达到程序识别欺骗时间的目的。

2. 退出当前容器,再进入容器时间还原了,连接docker容器是通过开一个线程去连接,当退出后线程关闭,就没了。

 

 可以将制作好的镜像上传到私有仓库,大家都可以研究

1
2
3
docker tag alpine_jietouzuqiu:v1 192.168.1.231:80/jtzq/alpine_zuqiu:latest
 
docker push 192.168.1.231:80/jtzq/alpine_zuqiu:latest

  

综上所述:后来我们没有采用这种方法更改docker容器内的时间。

 

最终采用方法:

1. 准备一台或者两台K8S的node节点,作为测试的专门测试node

2. 将测试需要更改时间验证的pod,通过K8S标签的方式和测试服务器绑定在一起。

3. 直接shell连接测试的服务器,使用linux系统命令 date -s “年-月-日 时:分:秒” 的方式更改时间,主机时间更改了,容器内时间自动就会变化。

4. 当测试完毕需要调回东八区的时间,在ntpdate ntp1.aliyun.com和阿里云时间同步服务器同步为当前时间。

 

posted @   江戸川のコナン  阅读(1693)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
……
点击右上角即可分享
微信分享提示