connexion à un docker-composer mysql contenant refuse l'accès, mais docker l'exécution même de l'image n'est pas
Je vais avoir quelques problèmes de connexion à la base de conteneur docker que j'ai lancé avec docker-composer. C'est un long post (désolé!).
Voici mon menu fixe-composer.fichier yml:
db:
image: mysql:5.7
ports:
- "3306:3306" # I have tried both ports and expose "3306". Still doesn't work
environment:
- MYSQL_ROOT_PASSWORD="secret"
- MYSQL_USER="django"
- MYSQL_PASSWORD="secret"
- MYSQL_DATABASE="myAppDB"
Alors:
$> docker-compose build
db uses an image, skipping #expected!
$> docker-compose up
<<LOTS OF OUTPUT>>
OK, alors maintenant, j'ai une place et à l'exécution de docker conteneur coureur mysql:5.7. Super! Ou est-il?
Lors de l'essai de mon django app, j'obtiens des erreurs de fonctionnement en disant que l'utilisateur n'est pas autorisé à se connecter à la base de données. Ok, alors peut-être que c'est mon django alors?
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7216f99ca0f mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp sharpfin_db_1
$> docker-machine ip dev
192.168.99.100
$> mysql -h 192.168.99.100 -P 3306 -u django -p
Enter password:
ERROR 1045 (28000): Access denied for user 'django'@'192.168.99.1' (using password: YES)
ok, donc C'est peut-être quelque chose à voir avec la connexion à l'docker-composer conteneur?
Que faire si j'ai essayez de vous connecter à partir de l'intérieur du conteneur docker?
$> docker exec -it c7216f99ca0f /bin/bash
root@c7216f99ca0f:/#
root@c7216f99ca0f:/# mysql -u django -p
Enter password:
ERROR 1045 (28000): Access denied for user 'django'@'localhost' (using password: YES)
ok, donc docker mysql je ne peux pas me connecter, je ne sais pas pourquoi. Voyons ce qui se passe quand j'essaie de le faire sans docker-composer:
$> docker run --name run-mysql -e MYSQL_ROOT_PASSWORD="secret" -e MYSQL_USER="django" -e MYSQL_PASSWORD="secret" -e MYSQL_DATABASE="myAppDB" -p "3306:3306" mysql:5.7
<<LOTS OF OUTPUT SAME AS BEFORE>>
Ok, alors maintenant nous avons un conteneur d'exécution de la même image, comme avant, avec les mêmes paramètres. (Je pense que cette affirmation est probablement pas vrai - docker-composer est en train de faire quelque chose de différent à docker run).
$> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73071b929e82 mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp run-mysql
Il y a mon conteneur (appelé run-mysql). Let's connect!
$> mysql -h 192.168.99.100 -P 3306 -u django -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.12 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myAppDB |
+--------------------+
2 rows in set (0.01 sec)
mysql>
Bien. Peut se connecter. C'est bizarre... Que dire de l'intérieur du conteneur?
$> docker exec -it 73071b929e82 /bin/bash
root@73071b929e82:/# mysql -u django -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.12 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myAppDB |
+--------------------+
2 rows in set (0.00 sec)
mysql>
Ok, je peux me connecter de l'extérieur et à l'intérieur du conteneur lorsque je le lance avec docker run, mais pas avec docker-composer. Ce qui se passe? Il doit y avoir quelque chose soit docker-composer est fait derrière les scènes qui change la façon dont la base de données est initialisée.
Tous les ci-dessus est l'exact même si j'essaie avec l'utilisateur root ainsi. Il n'est donc pas un problème d'autorisations avec le django d'utilisateur.
Toutes les idées comment résoudre ce problème?
- Merci pour ces bien structuré question. Exactement le problème que j'ai eu et c'est exactement la solution.
- J'ai le même problème, mais aucune des solutions données sont travail.
- Pour moi, la cause était la façon dont j'ai été l'invocation client à l'aide de Dockerfile "point d'entrée". Le DB d'informations d'identification transmis comme des variables d'environnement m'a obligé à utiliser le shell version de point d'entrée et pas de commande version de La bonne façon pour point d'entrée: ["/bin/bash", "-c", "java -DMYSQL_PASSWORD=${MYSQL_PASSWORD} -jar myapp.de la guerre"]
Vous devez vous connecter pour publier un commentaire.
Variables d'environnement dans
docker-compose.yml
fichier ne doit pas avoir des devis lors de l'utilisation de la matrice de définition:Si vous les utilisez dans votre
docker-compose.yml
fichier:et de l'exécution:
et entrez l'exécution de conteneur:
vous verrez le résultat:
Je suis en utilisant le officiel de mysql image avec docker-composer et de ne pas avoir un problème. La seule différence dans mon fichier composer, c'est que je suis à l'aide d'un dictionnaire au lieu d'un tableau:
J'ai remarqué que la fenêtre de rédaction de la documentation d'un dossier est toujours bloqué en V1 dans certains endroits, de sorte que vous pouvez essayer ce, si vous utilisez V2. Sinon, pour le débogage, vous pouvez utiliser
docker-compose exec
pour interagir avec le conteneur créé par composer directement.docker-compose exec db /bin/bash
vous permet d'obtenir un shell sur le conteneur qui vous trouble et vous pouvez vérifier des choses commeSHOW GRANTS FOR django@'%'
ou si les ports sont transmis correctement. J'espère que cette aide.ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
J'ai eu un problème similaire, et ce qui m'a aidé:
https://github.com/docker-library/mysql/issues/51#issuecomment-76989402
J'ai eu le même message d'erreur "Accès refusé pour l'utilisateur 'admin'@'172.20.0.1' (using password: YES)". Et pour le long temps n'arrivais pas à comprendre comment le résoudre. Dans ma situation doker-composer prend de configuration de .fichier env.
Enfin j'ai trouvé le problème! Le problème était dans le double quots dans les paramètres.
ne fonctionne pas
travail
Il ressemble à votre problème est résolu. Je pensais que je voudrais discuter de mes problèmes similaires à ce.
Je suis en cours d'exécution de tomcat (web) et mysql (db) à l'aide de docker-composer sur un NAS Synology (DSM 6.0.2). Il a bien fonctionné sur une Ubuntu boîte que j'ai, mais pas sur le NAS.
Le problème était le pare-feu sur le serveur NAS - j'avais modifié mes règles de pare-feu pour permettre à certains ports ouverts mais alors REFUSER TOUT à la fin. Quand j'ai ajouté :3306 pour les ports autorisés, il a travaillé!
Ce n'est pas une bonne solution et je ne sais pas pourquoi DSM cette depuis le menu fixe-composer est en cours d'exécution sur un PONT réseau. J'ai mis dans un ticket de support à ce sujet.
Cette réponse peut aider les autres avec cette bloqué conteneur question.