Beim Anwenden von Docker-Containern mounten wir häufig das Host-Verzeichnis in den Docker-Container. Wenn die Ordnerberechtigungen des Hostcomputers dem Stammbenutzer gehören, müssen wir den Benutzer mit den Ordnerberechtigungen auf „chown“ setzen, um das normale Schreiben des Verzeichnisinhalts sicherzustellen. Hier ist ein Beispiel:Es wird die Docker-Version von Jenkins verwendet. Nach dem Ausführen tritt der folgende Fehler auf: [root@localhost CICD]# Docker-Protokolle -f Jenkins touch: „/var/jenkins_home/copy_reference_file.log“ kann nicht berührt werden: Berechtigung verweigert Kann nicht in /var/jenkins_home/copy_reference_file.log schreiben. Falsche Volumeberechtigungen? Das Verzeichnis, in dem mein Jenkins gemountet ist, ist /opt/jenkins/xxxxx, erstellt vom Root-Benutzer, und die UID des Jenkins-Benutzers ist 1000 Sie müssen die Einstellungen also wie folgt ändern: sudo chown -R 1000:1000 /opt/jenkins Starten Sie dann den Container neu und der Fehler wird behoben. Ergänzung: Einführung von zwei Möglichkeiten zum Umgang mit Dateiberechtigungen beim Schreiben von Volumes aus Docker-Containern Sag es im VorausContainer werden häufig als Ersatz für native Installationstools verwendet. Es ist viel besser, Container mit den erforderlichen Versionen auf dem Host zu verwenden, als veraltete Tools zu nutzen. Bei jeder Interaktion des Containers mit dem Hostsystem bleiben jedoch Dateien mit falschen oder beschädigten Berechtigungen zurück. Glücklicherweise erfordert die Lösung dieses Problems nicht den Einsatz von Skripten. ProblembeschreibungWenn ein Container ein lokales Verzeichnis bereitstellt und Dateien dorthin schreibt, wird dessen Eigentümerschaft durch den Benutzer innerhalb des Containers bestimmt: nicholas@host:~/source$ mkdir Quelle nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source ubuntu root@a031d11c9515:/source# mkdir Unterverzeichnis root@a031d11c9515:/source# touch-Unterverzeichnis/neue Datei root@a031d11c9515:/Quelle# beenden Ausfahrt nicholas@host:~/source$ ls -lR .: insgesamt 4 drwxr-xr-x 2 root root 4096 Jul 16 19:35 Unterverzeichnis ./Unterverzeichnis: gesamt 0 -rw-r--r-- 1 root root 0 Jul 16 19:35 newfile nicholas@host:~/source$ rm -rf Unterverzeichnis/ rm: „subdir/newfile“ kann nicht entfernt werden: Berechtigung verweigert Darüber hinaus können Sie diese Verzeichnisse und Dateien mit falschen Eigentümern möglicherweise nicht löschen. Lösung 1: Aus dem Behälter nehmenEine sehr gängige Lösung besteht darin, den Besitz von Dateien und Verzeichnissen innerhalb des Containers zu ändern: nicholas@host:~/Quelle$ docker run -it --rm --volume $(pwd):/Quelle --workdir /Quelle ubuntu root@d1c3bee8bb2b:/Quelle# ls -al insgesamt 12 drwxrwxr-x 3 1000 1004 4096 16. Juli 19:35 . drwxr-xr-x 1 root root 4096 16. Juli 19:39 .. drwxr-xr-x 2 root root 4096 Jul 16 19:35 Unterverzeichnis root@d1c3bee8bb2b:/Quelle# chown 1000:1000 Unterverzeichnis/ -R root@d1c3bee8bb2b:/Quelle# ls -l insgesamt 4 drwxr-xr-x 2 1000 1000 4096 Jul 16 19:35 Unterverzeichnis root@d1c3bee8bb2b:/Quelle# beenden Ausfahrt nicholas@host:~/source$ ls -l insgesamt 4 drwxr-xr-x 2 Nicholas lpadmin 4096 16. Juli 19:35 Unterverzeichnis nicholas@host:~/quelle$ Der Nachteil dieses Ansatzes besteht darin, dass zusätzliche Logik erforderlich ist und Sie die Benutzer- und Gruppen-IDs des Benutzers kennen müssen, der den Container ausführt. Lösung 2: Erstellen Sie eine Datei mit dem richtigen EigentümerDie zweite Lösung ist sauberer und erstellt die Dateien und Verzeichnisse mit den richtigen Eigentümern innerhalb des Containers. Docker bietet einen Parameter zum Festlegen der Benutzer-ID und Gruppen-ID des Benutzers im Container: nicholas@host:~/source$ docker run -it --rm --volume $(pwd):/source --workdir /source --user $(id -u):$(id -g) ubuntu Gruppen: Name für Gruppen-ID 1004 kann nicht gefunden werden Ich habe keinen Namen!@bf7f355f3b65:/source$ touch newfile Ich habe keinen Namen!@bf7f355f3b65:/source$ exit Ausfahrt nicholas@host:~/source$ ls -l insgesamt 4 -rw-r--r-- 1 nicholas nicholas 0 Jul 16 19:42 newfile drwxr-xr-x 2 Nicholas lpadmin 4096 16. Juli 19:35 Unterverzeichnis nicholas@host:~/quelle$ Mit dieser Methode können Sie Benutzer-ID- und Gruppen-ID-Fehler beheben. Bitte beachten Sie, dass die Ausführung als Root innerhalb eines Containers aus Sicherheitsgründen die schlechteste Vorgehensweise ist. Dockerfiles sollten immer die USER-Direktive verwenden, um die direkte Verwendung von Root-Rechten zu vermeiden. Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur. Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung des Ausführungsprozesses von MySQL-Abfrageanweisungen
>>: JavaScript-Interview: So implementieren Sie die Methode zur Array-Abflachung
Verwenden Sie CSS-Stile und HTML-Tag-Elemente Um ...
Was ist HTML? Um es einfach auszudrücken: HTML wi...
Deinstallieren Bestätigen Sie zunächst mit dem fo...
Wir verwenden Klickereignisse häufig im A-Tag: 1. ...
Vorwort: Vue3 ist schon seit langem verfügbar. Vo...
CPU-Last und CPU-Auslastung Beides kann bis zu ei...
Installieren Sie memcached yum install -y memcach...
Heute sind CSS-Präprozessoren der Standard für di...
Linux-Befehl „col“ Der Linux-Befehl col wird zum ...
Methode 1: Werte hinzufügen Gehen wir zu MDN, um ...
Inhaltsverzeichnis 1. Ziehen Sie das MySQL-Image ...
Laden Sie das Redis-Image herunter Docker-Pull yy...
Dieser Artikel erläutert anhand von Beispielen di...
Vorwort Beim Schreiben von Front-End-Code kommt m...
Hier ist ein Fall des Ziehens einer modalen Box. ...