簡體   English   中英

為mysql docker容器配置時區

[英]Configure time zone to mysql docker container

我有一個 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 加載,因為如果我嘗試將無效的配置放在那里,也不會發生任何事情(容器正常啟動)。 對此有何建議?

所以你需要在這種情況下使用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

這是因為它需要已經加載時區。 也可以解決這個問題,但太麻煩了。 我只會使用環境變量,因為這意味着當容器啟動時,時區已經設置。

時間

價值應該是

default_time_zone=Europe/Sofia

查看詳情

但是,這可以給你的錯誤是這樣,而重新啟動mysql服務,所以你要編輯custom.cnf文件之前使用以下命令。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p

對我來說,我正在使用 Keramatic https://kitematic.com通過單擊MySQL容器常規配置並在https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 中添加TZ指定與您當前的時間顯示列表

在此處輸入圖片說明 干杯

mariadb:10.3容器解釋了TZ環境變量,盡管它沒有在 docker 鏡像的 Readme.md 中提到。 在我的情況下,提供America\\New_York的價值工作得很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM