Comment se connecter de localhost au conteneur Docker exécuté sur le réseau Docker
P粉418854048
2023-07-25 11:54:51
<p>J'ai un conteneur Docker MySQL écrit en utilisant Docker comme ceci :</p>
<pre class="brush:php;toolbar:false;">version : "3.3"
prestations de service:
serveur de base de données :
nom_conteneur : base de données
image : mysql : dernière
construire:
fichier docker : ./Dockerfile
environnement:
MYSQL_ROOT_PASSWORD : rootTest
MYSQL_USER : Soumalya
MYSQL_PASSWORD : test utilisateur
ports :
- "3031:3306"
réseaux :
- interne
tomes :
-mysql:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
redémarrage : à moins d'être arrêté
réseaux :
interne:
pilote : pont
tomes :
mysql :</pre>
<p>Je me connecte à localhost:3031 avec le bon mot de passe, mais cela me donne cette erreur : </p>
<pre class="lang-bash Prettyprint-override"><code>Accès refusé pour l'utilisateur 'root'@'172.19.0.1' (en utilisant le mot de passe : OUI)
</code></pre>
<p>Comment corriger cette erreur ? Les autres conteneurs du même réseau interne ne parviennent pas non plus à se connecter à la base de données. </p><p>Je donne le contenu du Dockerfile ici :</p><p><code></code></p>
<pre class="brush:php;toolbar:false;">AJOUTER init.sql init.sql</pre>
<p>J'ai donné le contenu de init. sql ici :</p>
<pre class="brush:php;toolbar:false;">créer une base de données s'il n'existe pas d'avis ;
créer une base de données s'il n'existe pas d'utilisateurs ;
créer une base de données s'il n'existe pas de fournisseurs ;
ACCORDEZ TOUS LES PRIVILÈGES sur les avis.* à 'soumalya'@'%' ;
ACCORDEZ TOUS LES PRIVILÈGES sur les utilisateurs.* à 'soumalya'@'%';
ACCORDEZ TOUS LES PRIVILÈGES sur les fournisseurs.* à 'soumalya'@'%';</pre>
<p>Dans les journaux du conteneur, je peux voir que la base de données démarre et attend les connexions entrantes sur le port 3306. </p>
Comme @HansKillan l'a dit, j'ai changé le mot de passe alors que la base de données existait déjà, le mot de passe modifié a été ignoré, il utilisait l'ancien mot de passe. J'ai dû modifier manuellement le mot de passe de mon utilisateur en écrivant la commande SQL à l'aide de docker exec <container_name>... en utilisant la commande SQL pour modifier le mot de passe de l'utilisateur. Ensuite, tout s'est bien passé. Dans votre cas, si votre base de données ne contient pas beaucoup de données, alors vous pouvez simplement supprimer le volume et recréer le conteneur pour raccourcir le délai