web-dev-qa-db-fra.com

Configurer le fuseau horaire sur le conteneur docker mysql

J'ai un conteneur docker mysql 5.7. Lorsque j'exécute la commande mysql:

SELECT now();

Il montre le temps -3 heures à mon heure actuelle (ce qui est logique). Je veux définir le fuseau horaire dans un fichier de configuration. En suivant la documentation de https://hub.docker.com/_/mysql/ je crée un volume dans mon docker-compose.yml fichier comme suit:

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

Lorsque je parcours les fichiers à l'intérieur du conteneur, le fichier custom.cnf y a-t-il. Dans ce fichier, j'ai essayé certaines des solutions que j'ai trouvées comme:

[mysqld]
default_time_zone='Europe/Sofia'

ou une solution de compromis moins élégante car la zone devra être changée deux fois par an (été/hiver):

[mysqld]
default_time_zone='+03:00'

mais aucun ne fonctionne. J'ai l'impression que ce fichier n'est pas du tout chargé par mysql parce que si j'essaye de mettre une configuration invalide là-dedans, rien ne se passe non plus (le conteneur démarre normalement). Des suggestions à ce sujet?

6
vivanov

Vous devez donc utiliser un Dockerfile dans ce cas et le gérer comme ci-dessous

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

Cela garantit que lorsque le conteneur mysql se charge, il charge toutes les informations de fuseau horaire. Vous pouvez maintenant l'utiliser à l'aide de variables d'environnement

Variable d'environnement

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

L'utiliser avec un fichier de configuration est un problème. Lorsque vous démarrez la base de données, cela vous donnera une erreur

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

En effet, il a besoin que le fuseau horaire soit déjà chargé. Il est possible de résoudre ce problème également, mais trop de tracas. Je vais utiliser la variable d'environnement uniquement car cela signifie que lorsque le conteneur démarre, le fuseau horaire est déjà configuré.

Time

15
Tarun Lalwani

la valeur doit être

default_time_zone=Europe/Sofia

vérifier les détails

Mais cela pourrait vous donner une erreur comme ceci lors du redémarrage du service mysql, vous devez donc utiliser la commande ci-dessous avant de modifier le fichier custom.cnf.

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