Einführung
Versuche, in einem Docker auf die MySQL-Datenbank zuzugreifen Der Container kann zu Fehlern „Zugriff verweigert“ führen, selbst wenn das Root-Passwort über festgelegt wurde Umgebungsvariable MYSQL_ROOT_PASSWORD. Dieses Problem kann aufgrund eines Missverständnisses über die Auswirkungen bereits vorhandener Datenbankdaten auf die Initialisierung auftreten.
Problem
Während der Containerinitialisierung, wenn das Volume der Datenbank zugeordnet ist Da das Datenverzeichnis (in diesem Fall db_data) bereits ein Datenbankdateisystem enthält, respektiert der Container die vorhandene Datenbank und ignoriert alle Umgebungsvariablen im Zusammenhang mit der Initialisierung, einschließlich MYSQL_ROOT_PASSWORD. Daher schlägt der Versuch, mit den konfigurierten Anmeldeinformationen auf die Datenbank zuzugreifen, fehl.
Lösung
Um dieses Problem zu beheben, stellen Sie sicher, dass Sie den Container ohne vorheriges Starten starten. vorhandenes Datenbankvolumen. Dies kann erreicht werden, indem das Datenvolumen mit dem folgenden Befehl gelöscht wird:
docker-compose down -v
Anschließend den Container mit dem Befehl docker-compose up -d wieder hochfahren. Dieser Vorgang löscht vorhandene Datenbankinhalte und initialisiert eine neue Datenbank mit dem angegebenen Root-Passwort, das in MYSQL_ROOT_PASSWORD gespeichert ist.
Hinweis: Seien Sie vorsichtig, da die oben genannten Befehle alle bereits vorhandenen Daten dauerhaft löschen das db_data-Volume. Wenn Sie diese Daten beibehalten möchten, erstellen Sie ein Backup, bevor Sie diese Befehle ausführen.
Alternative für Bind Mounts
Wenn Sie einen Bind Mount verwenden, entfernen Sie dessen Inhalt manuell durch Navigieren zum Bind-Mount-Pfad hinzufügen und Folgendes ausführen:
rm -rf /path/to/bind/mount/*
Andere Relevante Informationen
Dieser Ansatz ist auf das MySQL-Docker-Image anwendbar. Es ist jedoch zu beachten, dass andere offizielle Datenbank-Docker-Images, einschließlich derjenigen für PostgreSQL und MongoDB, einem ähnlichen Initialisierungsprozess folgen und bei der Verwendung bereits vorhandener Datenvolumes ähnliche Probleme auftreten können.
Das obige ist der detaillierte Inhalt vonWarum verweigert mein Docker-MySQL-Container den Zugriff, obwohl MYSQL_ROOT_PASSWORD festgelegt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!