zl程序教程

您现在的位置是:首页 >  其他

当前栏目

修改docker容器时间的详解

2023-04-18 16:18:41 时间

修改docker容器时间详解

修改docekr容器时间有两种方法:

  1. 使用挂载/etc/localtime 时间(简单)
  2. 使用libfaketime进行修改(复杂)

1. 使用映射时间修改

在docker启动的时候,挂载目录,通过修改系统时间从而修改容器时间,需要注意系统时间会影响其他容器

docker run --name mysql   -p 3306:3306    -v /etc/localtime:/etc/localtime  -e MYSQL_ROOT_PASSWORD=2020  -d  --restart=always mysql:5.7 

注意这一句 -v /etc/localtime:/etc/localtime ,使宿主机时间和docker时间一致

我们只需要通过 date -s “2021-01-21 02:30:16” 修改宿主机时间,通过 docker exec -it mysql date,可以查看两者时间相同

请添加图片描述
请添加图片描述

数据库中插入一条数据,也是使用当前时间

请添加图片描述

注意:修改时间后,经测试,容器不需要重启就会变为当前时间

2. 使用libfaketime

这种修改方式,宿主机时间和容器时间互相不会影响。相当于容器单独模拟出一个时间

如果直接在docker exec -it 进入容器,使用libfaketime运行后进行修改,容器中的服务只有重新运行才会使用该时间。如果重启容器,该时间修改就会失效。通过我们创建容器的时候会运行一个主程序(PID为1),这个程序down调,容器也会挂掉,所以一般通过dockerfile将libfaketime打进新镜像,直接运行镜像。

一般我们容器会有两种基于ubuntu和centos(两个运行命令不一样)

ubuntu:

FROM openjdk:8u212
RUN  apt-get update
RUN apt-get install  git
RUN git clone https://github.com/wolfcw/libfaketime.git
RUN apt-get install -y gcc
RUN apt-get install -y make
WORKDIR /libfaketime/src
RUN make && make install

centos:

FROM mysql:5.7 
WORKDIR /
RUN  yum update 
RUN yum  -y install  git
RUN git clone https://github.com/wolfcw/libfaketime.git
RUN yum -y  install  gcc
WORKDIR /libfaketime/src
RUN make && make install

然后通过 docker build -t 【镜像名称】:【镜像版本】 ./ ,打包成为新的镜像。

docker run --name  test -p   -e LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 -e FAKETIME="@2000-01-01 10:30:00"    -d  test:v1   

LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
-e FAKETIME=“@2000-01-01 10:30:00”

这两句就是更改时间的,有无@的区别:**"@2000-01-01 10:30:00"时间会递增;“2000-01-01 10:30:00”**时间不会变

还有一个参数:-e FAKETIME_STOP_AFTER_SECONDS=10 运行多长时间后停止,停止后时间会恢复为正常时间

也可以用dockr-compose传入参数(environment下面):
请添加图片描述

注意openjkd:11镜像会导致cpu占用过高,需要更换为其他jdk11版本