1、首先问题的原因是时区不一致。
2、很多人通过 -v 把宿主时区挂载到容器,这种做法是错误的,先不说宿主系统和容器不一致的问题,即使相同也只能解决部分问题。
3、镜像提供了一个环境变量来设置时区解决:
1)如果直接运行容器:docker run -e TZ=’Asia/Shanghai’。
2)如果使用docker-compose.xml配置:
environment:
TZ : ‘Asia/Shanghai’
4、部分软件的时区是自己设置的,跟docker和容器无关:
1)docker-gitlab镜像,默认使用UTC。
解决方法:找到gitlab.yml 修改-> time_zone: ‘Beijing’
2)mysql:5.7.2以上:
This variable was added in MySQL 5.7.2. Before 5.7.2, timestamps in log messages were written using the local system time zone by default, not UTC. If you want the previous log message time zone default, set log_timestamps=SYSTEM.
在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数。
解决方法:
SHOW GLOBAL VARIABLES LIKE ‘log_timestamps’;
+—————-+——–+
| Variable_name | Value |
+—————-+——–+
| log_timestamps | UTC |
+—————-+——–+

SET GLOBAL log_timestamps = SYSTEM;
Query OK, 0 rows affected (0.00 sec)

SHOW GLOBAL VARIABLES LIKE ‘log_timestamps’;
+—————-+——–+
| Variable_name | Value |
+—————-+——–+
| log_timestamps | SYSTEM |
+—————-+——–+