Docker Mysql contenant le mot de passe root [mysqld écoute le port 0]
Aujourd'hui, je suis en train de faire mon menu fixe de l'environnement de travail !
Dans cette affaire, j'ai rencontré un problème : mon MySQL conteneur, l'extension MySQL officiel Docker image, semble ne parviennent pas à créer le compte root, malgré le réglage de la MYSQL_ROOT_PASSWORD
variable d'environnement dans mon docker-compose`.yml
.
Je copie ici mon Panneau fichiers :
docker-composer.yml
La plupart des variables d'environnement sont utilisées dans des scripts et des applications indépendamment du serveur MySQL. Seulement MYSQL_ROOT_PASSWORD
mérite d'intérêt (peut-être cette déclaration est la cause de mon incapacité à faire ce travail..! ).
mysql:
container_name: my_mysql
build: mysql
environment:
- MYSQL_DATABASES=my-database
- MYSQL_ROOT_PASSWORD=root
- MYSQL_HOST=127.0.0.1
- MYSQL_PORT=33306
- MYSQL_USER=user
- MYSQL_PASSWORD=password
- MYSQL_MY_DATABASE=my-database
ports:
- "33306:3306"
volumes:
- "./volumes/mysql:/var/lib/mysql"
mysql/Dockerfile
La commande dos2unix est destinée à convertir Windows fins de ligne Unix.
La coutume point d'entrée est nommé différemment pour éviter overidding la valeur par défaut de mysql point d'entrée de script.
FROM mysql:5.7
MAINTAINER Wonderful Dev <wonderful.dev@wonderful-company.com>
RUN apt-get update && apt-get install -y dos2unix
COPY conf.d/custom.cnf /etc/mysql/conf.d/
COPY docker-entrypoint-initdb.d/databases.sh /docker-entrypoint-initdb.d/databases.sh
COPY my-entrypoint.sh /my-entrypoint.sh
RUN dos2unix /docker-entrypoint-initdb.d/databases.sh && dos2unix /my-entrypoint.sh && dos2unix /etc/mysql/conf.d/custom.cnf && apt-get --purge remove -y dos2unix && rm -rf /var/lib/apt/lists/*
RUN chmod a+x /docker-entrypoint-initdb.d/databases.sh && chown root:root /docker-entrypoint-initdb.d/databases.sh
RUN chmod a+x /my-entrypoint.sh && chown root:root /my-entrypoint.sh
ENTRYPOINT ["/entrypoint.sh", "/my-entrypoint.sh"]
CMD ["mysqld"]
mysql/my-entrypoint.sh
Cette commande chmod est destinée à éviter ce genre d'erreur
#!bin/bash
chmod 664 /etc/mysql/conf.d/custom.cnf
exec "$@"
mysql/config/custom.cnf
[mysqld]
default-storage-engine=INNODB
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
bind-address = 0.0.0.0
skip-external-locking
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[isamchk]
key_buffer = 16M
Tout ça fonctionne, sauf que je n'ai pas accès à la racine, me bloque à partir de la création de bases de données ou des utilisateurs mysql pour mes applications !
Je vous remercie pour tous les conseils 😀 !
MODIFIER: Après plusieurs jours d'enquête, et un problème dans docker-library/mysql
référentiel, nous avons découvert que l'un des problèmes était obsolète configuratio clé dans personnalisé.cnf.
key_buffer => key_buffer_size
Maintenant le conteneur s'exécute quelques secondes après la construction, puis crash.
Le principal indice dans les journaux, c'est que la ligne :
Version: '5.7.15' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server (GPL)
J'ai déjà essayé une solution proposée pour configurer manuellement le port de personnalisé.cnf mais il ne fonctionne pas. Le conteneur tente de se connecter à MySQL et de crash en raison de la port.
Le problème n'était pas assez visible, car lors du lancement de l'contenant un deuxième temps, l'initialisation est ignorée, le bon port a été configuré, et le serveur a bien fonctionné.
Le truc, c'est que, en raison de l'accident, à la fin de l'initialisation n'a pas été exécutée, y compris mes scripts et la création de bases de données avec les utilisateurs.
Donc j'aimerais savoir pourquoi ce fichu mysqld est à l'écoute sur le port 0 de la première fois que j'ai lancer le conteneur après la construction.
Si vous avez une idée, je serais heureux d'ici à ce sujet !
Vous devez vous connecter pour publier un commentaire.
Enfin j'ai tout compris, merci pour les gars sur cette question : https://github.com/docker-library/mysql/issues/82
Le coupable était le
MYSQL_HOST
variable d'environnement, qui était à l'origine dumysqld --initialize-insecure
commande échoue.La solution est de remplacer
127.0.0.1
aveclocalhost
, qui produit le texte suivant docker-composer.yml :J'espère que ça aidera certaines personnes 😀 !
Essayer d'inverser votre entrypoints:
La builtin point d'entrée est à la recherche de "mysqld" comme le premier arg, pas "my-entrypoint.sh". Donc, vous voulez appeler la vôtre et puis faire tourner le point d'entrée par défaut avec le passé options.
exit 1
! J'ai enlevé monCMD
instruction à la fin de mon Dockerfile, mais cette fois, le conteneur est sorti avec l'état 0. J'ai essayé d'enlever laexec "$@"
instruction dans mon point d'entrée, le même résultat. Ty pour la suggestion ! EDIT : je tiens à préciser que, dans tous les cas, les journaux étaient vides 🙁