docker容器中如何修改时间
作者:森林番茄
这篇文章主要介绍了docker容器中如何修改时间问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
docker容器中修改时间
我们在docker容器中直接通过命令行修改时间会有下面这个报错:
date: can't set date: Operation not permitted
这是由于docker容器是基于Linux的Capability机制来进行隔离。
而修改系统时间是需要有SYS_TIME权限才可以修改,docker容器默认是没有这个权限的。
所以我们可以在启动容器的时候,加一个参数
--cap-add SYS_TIME
比如
docker run -it --cap-add SYS_TIME --name docker1101 apline /bin/sh
然后我们再去容器中执行修改时间的命令:
date -s "2021-3-10 11:42:45" docker exec -i docker1101 /bin/sh -c 'date -s "2021-3-10 11:42:45"'
可以看到容器的时间已经改变
不过通过这种方式修改容器的时间,事实上同时把宿主机的时间也会修改了。
如果这个宿主机上同时运行了其他的容器,那么这些容器的时间也会产生变化。
另外还有一种方式,可以用libfaketime
libfaketime是一个库,用于修改docker容器时间而不影响宿主机的。
它能够“覆盖”应用程序用来检索当前日期或时间的系统调用,并给这些调用提供伪造的值。
它发布于github
安装记录如下:
我这里的docker用得是apline,先切换apline安装源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
下载libfaketime
wget https://github.com/wolfcw/libfaketime/archive/master.zip
安装
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories apk add make gcc g++ wget http://192.168.0.203/master.zip unzip master.zip cd libfaketime-master make && make install cd .. rm -rf libfaketime-master master.zip
验证
export LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 FAKETIME="2019-08-12 10:30:22"
docker容器修改时间报错 date: cannot set date: Operation not permitted
docker容器修改时间 date -s 报错 date: cannot set date: Operation not permitted
原因是在容器内没有权限进行操作,启动容器时授权即可。
docker-compose修改方法
添加 privileged: true
容器修改方法
docker run -itd --privileged=true -p 3306:3306 mysql:5.7.36
接下来就可以使用date -s修改时间了
直接修改时区
添加
environment: - TZ=Asia/Shanghai
如下图:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。