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 |
+—————-+——–+

python经常在某些环境安装的时候会出现,这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/python3.6/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/python3.6/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

可能的原因是因为安装python的时候没有找到sqlite3.so的库。
简单的解决方式:

# 安装sqlite相关的全部,可能并不需要全部,为了简单直接用*号代替了
yum install sqlite*
然后重新编译python或者重新安装python

如果这种方式解决不了,建议通过编译安装sqlite3,下载地址

./configure --prefix=/usr/local/sqlite3
make && make install

然后打开python安装源码的setup.py修改如下:

sqlite_inc_paths = [ '/usr/include',
                             '/usr/local/sqlite3/include', #增加该部分内容
                             '/usr/include/sqlite',
                             '/usr/include/sqlite3',
                             '/usr/local/include',
                             '/usr/local/include/sqlite',

重新编译安装。
上面的方法我自己在centos6.5、python3.6的环境依旧没解决问题。最后我是这样解决的:

#手动安装sqlite3 完成的时候会有这么一段提示:
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

这段内容显示了sqlite3的安装路径:/usr/local/lib
特别注意add LIBDIR to the 'LD_LIBRARY_PATH' environment variablesqlite建议添加环境变量。

export LD_LIBRARY_PATH=/usr/local/lib

设置一个环境变量,然后重新编译python3安装就能够成功了。