docker容器中mysql时间不同步问题
每日一点学习,加油~
个人博客地址:https://sopp.gitee.io/blog/
最近由于项目中需要进行时间同步,刚好项目中需要使用到docker,所以从docker方面入手进行时间同步。
1.首先进行容器和主机的时间同步。
在docker-compose的配置文件中,使用/etc/localtime:/etc/localtime参数进行容器时间同步。具体的示例如下:
mysql:
build:
#dockerfile的路径
context: ./mysql
#dockerfile的名称
dockerfile: Dockerfile
ports:
- "3307:3306"
#相当于docker run命令中的-e
environment:
- "MYSQL_ROOT_PASSWORD=root"
#初始化的数据库名称
- "MYSQL_DATABASE=test_compose"
- "MYSQL_ROOT_HOST=%"
#容器名称
container_name: mysql-compose
restart: always
#数据卷映射关系,也就是把本地的目录,和mysql容器中的目录,进行对应映射。
volumes:
- "./mysql/data/:/var/lib/mysql"
- "/etc/localtime:/etc/localtime"
说明:
这里最重要的即为:/etc/localtime:/etc/localtime,使用这个配置,对docker容器和外部主机的时间进行同步。
2. 如果容器中存在mysql等,那么即需要同步mysql的时间与mysql容器的时间。
一般默认为配置mysql默认时区即可。具体示例如下:
mysql:
build:
#dockerfile的路径
context: ./mysql
#dockerfile的名称
dockerfile: Dockerfile
ports:
- "3307:3306"
#相当于docker run命令中的-e
environment:
- "MYSQL_ROOT_PASSWORD=root"
#初始化的数据库名称
- "MYSQL_DATABASE=test_compose"
- "MYSQL_ROOT_HOST=%"
#容器名称
container_name: mysql-compose
restart: always
#数据卷映射关系,也就是把本地的目录,和mysql容器中的目录,进行对应映射。
volumes:
- "./mysql/data/:/var/lib/mysql"
# - "/etc/localtime:/etc/localtime"
#该选项中的命令会覆盖Dockfile中的CMD中的命令.lower_case_table_names参数是为了表名不区分大小写,default-authentication-plugin是8.0中密码加密策略不同带来的链接问题,如果不用8.0可不加此选项
command: [
'mysqld',
'--innodb-buffer-pool-size=20M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_bin',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
说明:
这里最重要的即为:–default-time-zone=+8:00,表示mysql本地时区加8小时,为东8区。