So stellen Sie eine Verbindung von Localhost zu einem Docker-Container her, der im Docker-Netzwerk ausgeführt wird
P粉418854048
2023-07-25 11:54:51
<p>Ich habe einen MySQL-Docker-Container, der mit Docker wie folgt geschrieben wurde:</p>
<pre class="brush:php;toolbar:false;">version: "3.3"
Dienstleistungen:
Datenbankserver:
Containername: Datenbank
Bild: mysql:latest
bauen:
Dockerfile: ./Dockerfile
Umfeld:
MYSQL_ROOT_PASSWORD: rootTest
MYSQL_USER: soumalya
MYSQL_PASSWORD: userTest
Häfen:
- „3031:3306“
Netzwerke:
- intern
Bände:
- mysql:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
Neustart: sofern nicht gestoppt
Netzwerke:
intern:
Fahrer: Brücke
Bände:
mysql:</pre>
<p>Ich verbinde mich mit dem richtigen Passwort mit localhost:3031, erhalte jedoch folgende Fehlermeldung: </p>
<pre class="lang-bash Prettyprint-override"><code>Zugriff für Benutzer „root“@‘172.19.0.1‘ verweigert (mit Passwort: JA)
</code></pre>
<p>Wie behebe ich diesen Fehler? Auch andere Container im selben internen Netzwerk können keine Verbindung zur Datenbank herstellen. </p><p>Den Inhalt der Docker-Datei gebe ich hier an:</p><p><code></code></p>
<pre class="brush:php;toolbar:false;">ADD init.sql init.sql</pre>
<p>Ich habe den Inhalt von init angegeben. SQL hier:</p>
<pre class="brush:php;toolbar:false;">Datenbank erstellen, falls keine Bewertungen vorhanden sind;
Datenbank erstellen, falls keine Benutzer vorhanden sind;
Datenbank erstellen, falls keine Anbieter vorhanden sind;
GEWÄHREN ALLE PRIVILEGIEN für Bewertungen.* an 'soumalya'@'%';
GEWÄHREN ALLE PRIVILEGIEN für Benutzer.* an 'soumalya'@'%';
GEWÄHREN SIE ALLE PRIVILEGIEN für Anbieter.* an 'soumalya'@'%';</pre>
<p>Aus den Containerprotokollen kann ich ersehen, dass die Datenbank startet und auf eingehende Verbindungen in Port 3306 wartet. </p>
正如@HansKillan所说,当数据库已经存在时,我更改了密码,更改的密码被忽略了,它正在使用旧密码。我不得不手动修改我的用户的密码写sql命令使用docker exec <container_name>…使用SQL命令修改用户密码。然后一切都成功了。在您的情况下,如果您的数据库不包含太多数据,那么您可以直接删除卷并重新创建容器以缩短时间