![](/img/trans.png)
[英]How to init mysql in docker with correct time_zone_name table?
[英]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
這是因為它需要已經加載時區。 也可以解決這個問題,但太麻煩了。 我只會使用環境變量,因為這意味着當容器啟動時,時區已經設置。
對我來說,我正在使用 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.