Die Verwendung des offiziellen MySQL-Images erfordert einige Änderungen, z. B. an Konfigurationsdateien, DB-Datendateiverzeichnissen usw. Wenn Sie den Container nach den Änderungen erneut ausführen, sind die geänderten Dateien ungültig und der neu generierte Container verfügt nicht über den zuvor geänderten Inhalt. Die erste besteht darin, das von der offiziellen Website heruntergeladene Image zu ändern und dann eine neue Image-Datei (Docker Commit -m) und andere neu generierte Image-Informationen zu übermitteln. Der zweite Typ von MySQL-DB-Daten: Wenn Sie denselben Container nach dem Schließen des Containers mit Docker-Neustart neu starten, sind die Daten normal. Wenn Sie den Container erneut mit Docker ausführen, werden die Daten nicht angezeigt, da jeder Container eine Dateiadresse hat Dies erfordert das Mounten der Datendatei, damit sie von anderen Containern gelesen werden kann. Starten Sie den MySQL-Container im Docker, nehmen Sie Änderungen an der Datenbank im MySQL-Container vor (z. B. Erstellen einer Datenbank, Ändern von Daten usw.) und rufen Sie den Container nach dem Commit erneut auf. Dabei stellen Sie fest, dass alle vorherigen Änderungen nicht gespeichert wurden. 1. Führen Sie den MySQL-Container im Hintergrund aus und legen Sie den Containernamen auf MySQL fest:
2. Geben Sie den Container Bash und MySQL ein, erstellen Sie eine Datenbank TEST_DB und überprüfen Sie, ob TEST_DB erfolgreich erstellt wurde: [root@localhost ~]# docker exec -it mysql bash root@f80791a0daf1:/# mysql -uroot -p Datenbanken anzeigen; Datenbank TEST_DB erstellen; 3. Beenden Sie den Container und übernehmen Sie die Änderungen in das Image: Diese Daten werden tatsächlich auf dem Hostcomputer geändert, nicht im MySQL-Image. Es funktioniert also nicht mysql> beenden Tschüss root@f80791a0daf1:/# beenden Ausfahrt [root@localhost ~]# Docker-Commit MySQL Owenchen1992/MySQL 4. Starten Sie den Container neu und geben Sie Bash und MySQL ein. Sie werden feststellen, dass der zuvor erstellte TEST_DB verschwunden ist, was darauf hinweist, dass die vorherigen Änderungen ungültig sind: [root@localhost ~]# Docker-Container stoppt MySQL MySQL [root@localhost ~]# Docker-Container rm mysql MySQL [root@localhost ~]# docker run --name=mysql -p 3306:3306 -d owenchen1992/mysql a1a1b4174caaadda0ec4b01b9fe5f92d6b3464d85284042274f71aebde0915dd [root@localhost ~]# docker exec -it mysql bash root@a1a1b4174caa:/#mysql -uroot -p Passwort eingeben: Willkommen beim MySQL-Monitor. Befehle enden mit ; oder \g. Ihre MySQL-Verbindungs-ID ist 3 Serverversion: 5.7.20 MySQL Community Server (GPL) mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | Leistungsschema | |System| +--------------------+ 4 Zeilen im Satz (0,00 Sek.) Ursache des Problems: Im MySQL-Dockerfile gibt es eine Zeile wie diese:
Dies bedeutet, dass alle Änderungen am Verzeichnis /var/lib/mysql im Container einem bestimmten Speicherort auf dem Host zugeordnet werden. Sie können das entsprechende Host-Verzeichnis mit dem Befehl „docker inspect containerID/name“ anzeigen. Beim Ausführen von „docker commit“ werden Änderungen am Verzeichnis /var/lib/mysql im Container nicht in das Image übernommen, diese Änderungen werden jedoch jederzeit mit dem entsprechenden Verzeichnis auf dem Host synchronisiert. Wenn Sie das festgeschriebene Image neu starten, erstellt der Container ein neues Verzeichnis auf dem Host, um seine Datenaktualisierungen zu speichern. Da es sich nicht um das ursprüngliche Hostverzeichnis handelt, kann der neu geöffnete Container die vorherigen Datenänderungen nicht sehen. Lösung: Nachdem wir nun die Ursache des Problems kennen, ist es nicht schwer, es zu lösen. Die Schritte sind wie folgt: Sie können direkt zu diesem Verzeichnis gehen, um das für jeden Container generierte Datenverzeichnis anzuzeigen 1. Suchen Sie das Hostverzeichnis, das dem MySQL-Container "/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data" entspricht: [root@localhost ~]# Docker untersucht MySQL [ ...... "Quelle": "/var/lib/docker/volumes/8496bbf33782bdadc027cdcf23197e5ebc36d11deb69ee833d63b557b3a7183d/_data", "Ziel": "/var/lib/mysql", ...... ] Wiederholen Sie die vorherigen Schritte zum Erstellen und Ausführen eines Containers, führen Sie einen neuen Container aus und erstellen Sie dann eine TEST-Tabelle. Schließen Sie zuerst den Container und löschen Sie dann den Containerdienst. 4. Führen Sie den neuen Container im Hintergrund aus, mounten Sie das dem Host-Rechner entsprechende Verzeichnis in das /var/lib/mysql-Verzeichnis des Containers und aktivieren Sie Lese- und Schreibberechtigungen (wichtige Schritte):
5. Geben Sie nun den neu geöffneten Container ein und überprüfen Sie die Datenbank: Es wird festgestellt, dass die soeben erstellte Datenbank TEST_DB durch erneutes Ausführen des Containers nicht verschwindet und das Problem behoben ist Die Schritte sind: 1. Erstellen Sie eine neue Tabelle. 2. Fahren Sie den Container zum Erstellen der Tabelle herunter. 3. Führen Sie den Container erneut aus und mounten Sie das Datenverzeichnis in /var/lib/mysql. Schon ist das Problem gelöst! Ergänzendes Wissen: So ändern Sie das Kodierungsformat bei Verwendung von MySQL in einer Docker-Umgebung Methode 1 (für die Modifikation einer einzelnen Maschine) Stellen Sie zunächst sicher, dass der MySQL-Dienst gestartet ist Geben Sie docker exec -it + Dienstname/bin/bash ein, um die Konsole aufzurufen Geben Sie den Befehl apt-get update ein Geben Sie apt-get install vim ein (die beiden obigen Befehle dienen zum Herunterladen des Vim-Editors). Geben Sie den Befehl vim /etc/mysql/mysql.conf.d/mysqld.cnf ein, um die Datei mysqld.cnf aufzurufen 4. Öffnen Sie mit i den Editiermodus und geben Sie am Ende des Textes folgendes ein: Hinweis: Nachfolgende Inhalte dürfen nicht falsch eingetragen werden, da sonst die Konfigurationsdatei ungültig wird. [Kunde] Standardzeichensatz = utf8 [mysql] Standardzeichensatz = utf8 [mysqld] Zeichensatzserver = utf8 Drücken Sie ESC zum Beenden und Umschalt+Doppelpunkt wq zum Speichern und Beenden. 5. Rufen Sie die MySQL-Konsole auf 6. Geben Sie show variables like 'char%'; ein, um die geänderten entsprechenden Informationen anzuzeigen Nachdem die Änderung abgeschlossen ist und die Datenbank neu gestartet wurde: Geben Sie Show-Variablen wie „char%“ ein. Die obigen Ergebnisse zeigen, dass die Änderung erfolgreich war. Methode 2 (anwendbar auf Cluster-Konstruktion) Kopieren Sie die Konfigurationsdatei aus dem Originalverzeichnis und ändern Sie sie mithilfe einer externen Datei. Diese Methode wird verwendet, um Dateien an mehrere Server zu senden und so die Standardkodierung der Datenbank zu ändern. docker exec -it + Dienstname/bin/bash, um die Konsole aufzurufen Geben Sie cd /etc/mysql/conf.d/ ein, um das Konfigurationsdateiverzeichnis aufzurufen Geben Sie pwd ein, um den absoluten Pfad der Datei zu erhalten Geben Sie cd ein, um zur Konsole zurückzukehren, beenden Sie Geben Sie den Docker-CP-Dienstnamen ein: /etc/mysql/conf.d/mysql.cnf /usr/soft (kopieren Sie die Datei mysql.cnf im Docker in den Soft-Ordner unter Linux) Öffnen Sie einen externen Editor (z. B. Notepad++) und schreiben Sie die Konfigurationsdatei wie folgt: [Kunde] Standardzeichensatz = utf8 [mysql] Standardzeichensatz = utf8 [mysqld] init_connect = 'SET-Sortierung_Verbindung = utf8_unicode_ci' init_connect='Namen festlegen utf8' Zeichensatzserver = utf8 Sortierserver = utf8_unicode_ci Zeichensatz-Client-Handshake überspringen PS: Es ist wichtig zu beachten, dass zwischen den Inhalten der Konfigurationsdatei Abstände vorhanden sein müssen. Gut sparen 7.docker cp /usr/soft/mysql.cnf Dienstname: /etc/mysql/conf.d/ Kopieren Sie die geänderte Datei in das ursprüngliche Verzeichnis und überschreiben Sie sie 8. Starten Sie den MySQL-Dienst im Docker neu. 9. Geben Sie den Befehl show variables like 'char%' ein, um das geänderte Zeichenkodierungsformat anzuzeigen Der obige Artikel zur Lösung des Problems, dass Änderungen an der Docker MySQL-Containerdatenbank nicht wirksam werden, ist der gesamte Inhalt, den der Herausgeber mit Ihnen teilt. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen. Das könnte Sie auch interessieren:
|
<<: HTML-Tutorial: Definitionsliste
>>: Tabellen-Paging-Funktion implementiert durch Vue2.0+ElementUI+PageHelper
Offizielle Website: http://code.google.com/p/zen-c...
Dieser Artikel zeigt ein kleines Beispiel für das...
Vor ein paar Tagen habe ich mir ein Video von ein...
Dieser Artikel enthält das grafische Tutorial zur...
Im Zuge des schrittweisen Übergangs von herkömmli...
Notieren Sie die Installation von zwei MySQL5.6.3...
Beim Entwurf von Tabellenstrukturen gehören numer...
Verwenden Sie reguläre Ausdrücke, um die IE-Browse...
Inhaltsverzeichnis Rekursiver Aufruf der Komponen...
Was ist HTTP? Wenn wir eine Website durchsuchen m...
Heute werde ich aufzeichnen, wie man MySQL 8.0.18...
Problem: Die von mybatis zurückgegebenen Daten vo...
Motivation Aus Lerngründen habe ich einen VPS-Die...
Implementieren eines responsiven Layouts mit CSS ...
1. Vektorkarte Vektorgrafiken verwenden gerade Li...