Verzeichnisberechtigungen beim Erstellen eines Containers mit Docker

Verzeichnisberechtigungen beim Erstellen eines Containers mit Docker

Als ich gestern ein Projekt schrieb, musste ich die abgeleitete Version von MySQL, Percona, verwenden, also wollte ich Docker verwenden, um es zu installieren. Infolgedessen bin ich die ganze Nacht in die Grube getreten und habe es heute Morgen endlich gelöst. Jetzt dokumentieren Sie es hier.
Der Grund für diese Falle ist, dass ich nicht sensibel auf das Verzeichnisberechtigungsproblem von Linux bin. Mein System ist Ubuntu 16.04 und alles ist normal, wenn ich Docker Pull Percona ausführe, um das Image abzurufen.


Geben Sie nach dem Pullen Docker-Images ein, um alle Images anzuzeigen. Die Anzeige ist normal:

Anschließend erstelle ich mit folgendem Befehl einen Container (keine Zeilenumbrüche bei der Ausführung verwenden):

docker erstellen --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:lates

Dieser Befehl bedeutet, dass ich einen Container mit dem Namen „percona“ erstelle, dann mein lokales Verzeichnis „/data/mysql-data“ dem Verzeichnis „/var/lib/mysql“ im Docker-Container zuordne und Port 3306 angebe, dann das Passwort des Root-Benutzers der Datenbank auf „root“ setze und das letzte „percona:latest“ die Version angibt, die ich oben abgerufen habe.

Da die Datenbank im Docker-Container nur ein Spiegel ist, kann man davon ausgehen, dass sie nicht wirklich existiert. Der Zweck der Zuordnung zu meinem lokalen Verzeichnis besteht darin, dass die von Docker im Verzeichnis /var/lib/mysql gespeicherten Daten synchronisiert und in meinem lokalen Verzeichnis /data/mysql-data gespeichert werden können. Dies stellt sicher, dass die Daten nicht verloren gehen, und erleichtert meine lokalen Vorgänge.

Wenn Sie die Befehlsparameter nicht verstehen, können Sie die offizielle Dokumentation lesen oder nach einem Docker-Video-Tutorial suchen, das Erklärungen enthält. Dann starte ich diesen Container, docker start percona. Nach dem Start frage ich alle laufenden Container docker ps ab, und dann gibt es ein Problem:


Es ist leer, das heißt, es werden keine laufenden Container gefunden... Dann habe ich alle Container geprüft, einschließlich der laufenden und der nicht laufenden. docker ps -a zeigt Folgendes:


Es stellte sich heraus, dass der Port nicht erfolgreich gebunden war und deshalb nicht ausgeführt wurde! Bei jeder Ausführung wurde er automatisch beendet.

Zu diesem Zeitpunkt habe ich die Docker-Protokolle überprüft und den Befehl „Docker-Protokolle Container-ID“ eingegeben, der Folgendes anzeigte:


Hinweis: 71 sind hier die ersten beiden Ziffern der Container-ID dieses Containers. Docker unterstützt diese vereinfachte Schreibweise.

Der Protokollfehler besagt, dass ich keine Berechtigung zum Erstellen und Schreiben in das Verzeichnis /var/lib/mysql im Container habe.
Nun habe ich die Ursache für dieses Problem gefunden, konnte es aber nach nächtelangem Suchen nicht lösen. Ich muss sagen, dass einige verantwortungslose Posts im Internet wirklich eine Falle sind!
Heute Morgen endlich eine Lösung gefunden:
Das heißt, überprüfen Sie, ob der Besitzer meines lokalen Verzeichnisses und der Besitzer des Verzeichnisses /var/lib/mysql im Docker-Container derselbe Benutzer sind.

docker run -ti --rm --entrypoint="/bin/bash" percona -c "whoami && id"

Mit diesem Befehl können Sie den Besitzer des Containers anzeigen. Er wird wie folgt angezeigt:


Geben Sie dann ein (ohne Zeilenumbrüche):

docker run -ti --rm -v /data/mysql-data:/var/lib/mysql --entrypoint="/bin/bash" percona -c "ls -la /var/lib/mysql"

Dieser Befehl wird verwendet, um den Besitzer dieses Verzeichnisses beim Zuordnen eines lokalen Datenträgers anzuzeigen.


Das ist der Grund. Deshalb wird ein Berechtigungsfehler gemeldet, wenn der MySQL-Benutzer auf das Verzeichnis im Docker zugreift! Denn der Besitzer des lokalen Mapping-Verzeichnisses ist der Root-Benutzer und der Besitzer des Verzeichnisses /var/lib/mysql im Docker-Container ist der MySQL-Benutzer mit der UID 999!
Die Lösung besteht dann darin, dem Besitzer des aktuellen Verzeichnisses die UID 999, den MySQL-Benutzer, zuzuweisen und dann den Container neu zu starten.

Das Problem ist gelöst! Ich habe eine ganze Nacht verschwendet. Ich muss sagen, dass ich mein Wissen über die Berechtigungskontrolle unter Linux vertiefen muss!

Dies ist das Ende dieses Artikels über die Fallstricke von Verzeichnisberechtigungen, wenn Docker Container erstellt. Weitere Informationen zu Verzeichnisberechtigungen, wenn Docker Container erstellt, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass der Hostname des Hosts im Docker-Container nicht abgerufen werden kann
  • Einfache Schritte zum Erstellen eines MySQL-Containers mit Docker
  • Detaillierte Erklärung zum Erstellen eines MySQL-Containers mit Docker und zum Herstellen einer Verbindung zum Container über die Befehlszeile
  • So erstellen Sie einen MySQL-Container mit Docker
  • Detaillierter Prozess zum Ändern des Hostnamens, nachdem Docker einen Container erstellt hat

<<:  So installieren Sie eine PHP7 + Nginx-Umgebung unter CentOS6.6

>>:  Neue Funktionen in MySQL 8.0: Hash Join

Artikel empfehlen

Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann

Vorwort: Eines Tages baute ich einen MySQL-Dienst...

Detaillierte Erklärung des HTML-Bereichs-Tags

Der <area>-Tag definiert einen Bereich in e...

Detailliertes Tutorial zur Installation von mysql5.7.18 auf centos7.3

1 Überprüfen Sie die Linux-Distributionsversion [...

Detaillierte Erklärung zur Verwendung von React.cloneElement

Inhaltsverzeichnis Die Rolle von cloneElement Anw...

Detailliertes Tutorial zur Installation von MySQL unter Linux

MySQL-Downloads für alle Plattformen sind unter M...

Warum wird mir die Zugriffsschnittstelle für Docker Tomcat nicht angezeigt?

Frage: Kann der Ursprungsserver keine Darstellung...

Detailliertes Tutorial zur Verwendung von stimulsoft.reports.js mit vue-cli

vue-cli verwendet stimulsoft.reports.js (Tutorial...

Tutorial zur binären Kompilierung und Installation von MySql centos7 unter Linux

// Ich habe einen ganzen Nachmittag für die Insta...

Beispielcode zum Zeichnen von Doppelpfeilen in gängigen CSS-Stilen

1. Mehrere Aufrufe eines einzelnen Pfeils Sobald ...

CSS3-Bézierkurven-Beispiel: Erstellen von Link-Hover-Animationseffekten

Wir verwenden animierte CSS3-Übergänge, um einen ...

Implementierungsskript für geplante Datenbanksicherung unter Linux

Inhaltsverzeichnis Szenario: Die Serverdatenbank ...

Einführung in die MySQL-Optimierung für die Unternehmensproduktion

Im Vergleich zu anderen großen Datenbanken wie Or...