遇到的问题:
- docker容器时间和服务器时间不一致
- 容器产生的日志时间相差8小时
问题解决:
-
docker容器和服务器时间不一致,我在docker启动命令添加了服务器时间文件的挂载:
-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:etc/timezone:ro
-
添加完后,我发现还不对,服务器时间是12小时制,容器内时间因为镜像打包默认选的是上海时区是24小时制。我搜了下说12小时制会有歧义,可能会导致问题。我就改了下默认时区:
#Ubuntu24.04的服务器
timedatectl set-timezone Asia/Shanghai
#vim /etc/default/locale,在最后一行加入以下代码
LC_TIME=en_DK.UTF-8
上述修改完后,需要退出当前服务器链接,重新链接服务器才能看到时间改变。
- 容器需要重启后,时间才能正常同步。
修改容器时间的集中常用方法:
- 1.直接用命令挂载这个两个目录,启动时映射
docker run -it -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime --name 容器名 镜像名
2.复制时区信息到容器
bash
docker cp /etc/localtime [容器ID或名字]:/etc/localtime
docker cp /usr/share/zoneinfo/Asia/Shanghai [容器ID或名字]:/etc/localtime
3.在已经创建好容器之后,进入容器进行指定时区
bash
docker exec -it 容器名/ID /bin/bash
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4.Dockerfile直接执行
bash
# Centos
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone;
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5.还有一种方法,我们直接cd到/usr/share/zoneinfo/Asia进行修改
bash
cd /usr/share/zoneinfo/Asia
cp -i Shanghai /etc/localtime