web-dev-qa-db-ja.com

mysql Dockerコンテナにタイムゾーンを構成する

Mysql 5.7ドッカーコンテナーがあります。 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'

または、ゾーンを年に2回(夏/冬)に変更する必要があるため、エレガントではない妥協案:

[mysqld]
default_time_zone='+03:00'

しかし、どれも機能しません。私は、このファイルがmysqlによってまったくロードされていないという感覚を持っています。なぜなら、無効な構成をそこに入れようとしても何も起こらないからです(コンテナは正常に起動します)。それに関する提案はありますか?

6
vivanov

したがって、この場合は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

構成ファイルで使用するには問題です。 DBを起動すると、エラーが発生します

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

これは、タイムゾーンが既にロードされている必要があるためです。これも修正できますが、面倒です。環境変数を使用するのは、コンテナが開始するときにタイムゾーンが既に設定されていることを意味するためだけです。

Time

15
Tarun Lalwani

値は

default_time_zone=Europe/Sofia

詳細を確認

しかし、これにより、mysqlサービスの再起動中にエラー このように が発生する可能性があるため、custom.cnfファイルを編集する前に以下のコマンドを使用する必要があります。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
3
Aditya Pawaskar