当前位置: 首页 > 知识库问答 >
问题:

将时区配置为mysql docker容器

章城
2023-03-14

我有一个mysql 5.7 docker容器。当我运行mysql命令时:

SELECT now();

它显示了我当前时间的3小时(这是合乎逻辑的)。我想在配置文件中设置时区。遵循中的文档https://hub.docker.com/_/mysql/我在我的docker compose中创建了一个卷。yml文件如下所示:

mysqldb:
    image: mysql:5.7.21
    container_name: mysql_container
    ports:
      - "3306:3306"
    volumes:
      - ./.docker/etc/mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf

当我浏览容器中的文件时,文件custom。有cnf。在该文件中,我尝试了一些解决方案,如:

[mysqld]
default_time_zone='Europe/Sofia'

或者是一种折衷方案,因为该区域每年必须更换两次(夏季/冬季),因此不太优雅:

[mysqld]
default_time_zone='+03:00'

但这一切都不管用。我有一种感觉,这个文件根本没有被mysql加载,因为如果我尝试将无效配置放入其中,也不会发生任何事情(容器正常启动)。有什么建议吗?

共有3个答案

归德厚
2023-03-14

对我来说,我使用的是Keramatichttps://kitematic.com通过单击MySQL容器General进行配置,并在中添加您当前的时间显示列表https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

楚宪
2023-03-14

价值应该是

default_time_zone=Europe/Sofia

查看详细信息

但这可能会给你这样的错误,而重新启动mysql服务,所以你应该使用下面的命令之前编辑custom.cnf文件。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
薛泰
2023-03-14

所以在这种情况下,您需要使用Dockerfile,并像下面这样处理它

FROM mysql:5.7.21
RUN echo "USE mysql;" > /docker-entrypoint-initdb.d/timezones.sql &&  mysql_tzinfo_to_sql /usr/share/zoneinfo >> /docker-entrypoint-initdb.d/timezones.sql

这确保了当mysql容器加载时,它将加载所有时区信息。现在您可以使用环境变量来使用它

环境变量

mysqldb:
    #image: mysql:5.7.21
    build: .
    #container_name: mysql_container
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Europe/Sofia

将其与配置文件一起使用是一个问题。当你启动数据库时,它会给你一个错误

mysqldb_1  | 2018-04-24T12:29:43.169214Z 0 [Warning] InnoDB: New log files created, LSN=45790
mysqldb_1  | 2018-04-24T12:29:43.215187Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
mysqldb_1  | 2018-04-24T12:29:43.281229Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2a87fec6-47bb-11e8-9f1e-0242ac110002.
mysqldb_1  | 2018-04-24T12:29:43.284010Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
mysqldb_1  | 2018-04-24T12:29:43.284404Z 0 [ERROR] Fatal error: Illegal or unknown default time zone 'Europe/Sofia'
mysqldb_1  | 2018-04-24T12:29:43.284567Z 0 [ERROR] Aborting

这是因为它需要时区已经加载。也有可能解决这个问题,但太麻烦了。我将使用环境变量,因为这意味着当容器启动时,时区已经设置。

 类似资料:
  • 问题内容: 默认情况下,对于MySQL服务器上的整个数据库,启用和禁用区分大小写的命令是什么?我知道COLLATE语句,但似乎有必要将其放在运行的每个SQL语句中。是否可以选择全局设置? 问题答案: 您可以在数据库创建和表创建级别上设置排序规则,作为CREATE TABLE 语句的一部分。 要为整个数据库设置排序规则,可以使用: 您还可以通过ALTER DATABASE更改现有数据库上的排序规则。

  • 问题内容: 我有一个运行一些Dockerfile的docker- compose文件来创建我的容器。我不想编辑Dockerfile来设置时区,因为它们可能会随时被团队成员更改,并且我有一个docker- compose.override.yml文件可以进行本地环境更改。但是,我的一个容器(基于Selenium的容器)似乎没有拉主机时区,这给我带来了麻烦。基于此,我想在所有容器上实施时区。现在在我的

  • 我有一个运行几个Dockerfile来创建我的容器的docker撰写文件。我不想编辑我的Dockerfile来设置时区,因为它们可以随时由我的团队成员更改,我有一个docker-compose.override.yml文件来进行本地环境更改。然而,我的一个容器(基于硒的容器)似乎没有拉动主机时区,这给我带来了问题。基于此,我想在所有容器上强制执行时区。在我的Dockerfile里我知道 一切正常。

  • 问题内容: 我需要更改单个数据库的时区吗? 我知道我们可以在WHM中更改时区(我们正在使用hostgator的专用服务器),但是服务器上运行的大量旧版软件中有很多+6小时的编码(即服务器时区为CST,需要GMT时间,因此以前的开发人员会在代码中手动更改日期/时间- 很糟糕!)。 我现在正在开发一个新软件,并希望将其全部保存在GMT中,我知道我可以使用date_default_timezone_se

  • 我正在尝试从Java/Spring软件发送电子邮件。我正在使用spring框架的JavaMailSender。如何将本地计算机配置为JavaMailSender的smtp主机?我可以通过以下命令发送电子邮件: 然而,我怎样才能写我的邮件。支持上述命令的属性? 这是我的javaMailSender bean: 这是mail.properties文件:

  • 配置文件中指令的作用范围可能是整个服务器,也可能是特定的目录、文件、主机、URL。本文阐述如何使用配置段(容器)以及.htaccess文件来改变配置指令的作用范围。 配置段(容器)的类型 相关模块 相关指令 core mod_version mod_proxy <Directory> <DirectoryMatch> <Files> <FilesMatch> <IfDefine> <IfModul