Nachdem die Anwendung in einen Container verpackt wurde, wird beim Starten des Docker-Containers standardmäßig der Root-Benutzer zum Ausführen von Befehlen verwendet. Daher werden die Anwendungen im Container standardmäßig vom Root-Benutzer ausgeführt, was ein hohes Sicherheitsrisiko darstellt. Wie können wir also Nicht-Root-Geschäftsbenutzer zum Ausführen von Anwendungen verwenden? Ich möchte dies anhand eines einfachen Beispiels veranschaulichen. Dieses Beispiel verwendet einen selbst erstellten Benutzer in einem Container, um ein einfaches Shell-Skript auszuführen und speichert das Skriptausgabeprotokoll außerhalb des Containers. Als nächstes werfen wir einen Blick auf den gesamten Prozess von der Image-Erstellung bis zum Containerbetrieb. 1. Erstellen Sie das Image: Ich werde Dockerfile verwenden, um das Image zu erstellen. Das Basisimage ist Ubuntu 14.04 (Sie müssen das Image zuerst abrufen, Docker Pullubuntu:14.04). Der Dockerfile-Inhalt ist wie folgt [root@host09 test]# cat Dockerfile VONdocker.io/ubuntu:14.04 WARTUNGSMITARBEITER He Pengfei RUN groupadd hpf -- eine Benutzergruppe erstellen RUN useradd -d /data -g hpf -- mhpf -- einen Benutzer erstellen RUN su - hpf -c "mkdir -p /data/scripts" RUN su - hpf -c "mkdir -p /data/logs" ARBEITSVERZEICHNIS /data/scripts KOPIEREN Sie test.sh /data/scripts/ Führen Sie den Befehl chown hpf:hpf test.sh aus. RUN chmod 755 test.sh ENTRYPOINT su - hpf -c "/data/scripts/test.sh" --Verwenden Sie den erstellten Benutzer, um das Skript [root@host09 test] auszuführen# Der Inhalt des Skripts ist wie folgt: [root@host09 test]# cattest.sh während [ 1 = 1 ] Tun echo `id`>>/data/logs/hpf.log -- Gibt das Protokoll in die Datei aus und macht es beim Starten des Containers persistent sleep 1 Erledigt [root@host09 test]# Als nächstes erstellen wir das Image: [root@host09 test]# dockerbuild -t hpf:v2 . Senden des Build-Kontexts an den Docker-Daemon 3.072 kB Schritt 1: VON docker.io/ubuntu:14.04 ---> c69811d4e993 Schritt 2: MAINTAINER hepengfei ---> Cache verwenden ---> b8401d2eb439 Schritt 3: Führen Sie groupadd hpf aus ---> Cache verwenden ---> 2e0d20802c41 Schritt 4: RUN useradd -d /data -g hpf -m hpf ---> Cache verwenden ---> bac36ee97aba Schritt 5: Führen Sie den Befehl su - hpf -c "mkdir -p /data/scripts" aus. ---> Cache verwenden ---> a92c3f5f8e34 Schritt 6: Führen Sie den Befehl su - hpf -c "mkdir -p /data/logs" aus. ---> Cache verwenden ---> 2e8665da7092 Schritt 7: WORKDIR /data/scripts ---> Cache verwenden ---> 7cf84a5a8aca Schritt 8: KOPIEREN Sie test.sh /data/scripts/ ---> 7e4c24de2096 Zwischenbehälter entfernen f96358d91c35 Schritt 9: Führen Sie chown hpf:hpf test.sh aus. ---> Läuft in fc9ab290c56c ---> f38afd1ea62c Zwischenbehälter entfernen fc9ab290c56c Schritt 10: Führen Sie chmod 755 test.sh aus ---> Wird ausgeführt in a35b507a1527 ---> 5b5223249f4c Zwischenbehälter ausbauen a35b507a1527 Schritt 11: ENTRYPOINT su - hpf -c "/data/scripts/test.sh" ---> Wird ausgeführt in 1ee7cc7fbec7 ---> 26e7d603dbac Zwischenbehälter entfernen 1ee7cc7fbec7 26e7d603dbac erfolgreich erstellt [root@host09 test]# Sehen Sie sich das erstellte Image an: [root@host09 test]# Docker-Bilder REPOSITORY TAG IMAGEID ERSTELLT GRÖSSE hpf v2 26e7d603dbac vor 42 Minuten 188,3 MB docker.io/ubuntu 14.04 c69811d4e993 vor 3 Wochen 188 MB [root@host09 test]# 2. Starten Sie den Container: Beachten Sie, dass Sie vor dem Starten des Containers die Berechtigungen des Verzeichnisses /data/hepf/log auf dem Host ändern müssen. Andernfalls hat das Protokoll im Skript beim Starten des Containers keine Berechtigung zum Schreiben in das Verzeichnis. Ich habe die Berechtigungen des Verzeichnisses direkt auf 777 geändert.
Sehen wir uns nun die Protokolldateien im Verzeichnis /data/hepf/log an: [root@host09 log]# pwd /data/hepf/log [root@host09 log]# ll insgesamt 12 -rw-rw-r-- 1 1000 1000 108007. Sept. 08:02 hpf.log [root@host09 log]# tail -2 hpf.log UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf) UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf) [root@host09-Protokoll]# Es ist ersichtlich, dass der Eigentümer der Datei derselbe ist wie der im Container erstellte HPF-Benutzer: hpf@ba688af3f598:~$ id UID = 1000 (hpf) GID = 1000 (hpf) Gruppen = 1000 (hpf) hpf@ba688af3f598:~$ Wenn es auf dem Host einen anderen Benutzer mit derselben ID wie der im Container erstellte Benutzer gibt, wird dieser Benutzer zum Besitzer der Protokolldatei auf dem Host. Derzeit wurden jedoch keine Probleme festgestellt. [root@host09 log]# cat /etc/passwd |grep hpf1 hpf1:x:1000:1000::/data1:/bin/bash[root@host09 log]# ll insgesamt 12 -rw-rw-r-- 1 hpf1 hpf1 11250 7. September 08:50hpf.log [root@host09-Protokoll]# Dies ist das Ende des einfachen Beispiels. Zusätzliches Wissen: Docker-Standardspeicher und Docker-Nicht-Root-Benutzer Methode 1
Stoppen Sie zuerst den Docker-Dienst:
oder
Verschieben Sie dann das gesamte Verzeichnis /var/lib/docker in den Zielpfad:
Methode 2 Die Docker-Konfigurationsdatei kann die meisten Parameter für Hintergrundprozesse festlegen. Der Speicherort ist in jedem Betriebssystem unterschiedlich. Der Speicherort in Ubuntu lautet: /etc/default/docker, und der Speicherort in CentOS lautet: /etc/sysconfig/docker. Wenn es CentOS ist, fügen Sie die folgende Zeile hinzu:
Wenn es Ubuntu ist, fügen Sie die folgende Zeile hinzu (da Ubuntu Selinux nicht standardmäßig aktiviert):
oder
1. Erstellen Sie zunächst eine Docker-Benutzergruppe. Wenn die Docker-Benutzergruppe vorhanden ist, können Sie sie ignorieren.
2. Fügen Sie den Benutzer zur Docker-Gruppe hinzu
3. Docker neu starten
4. Wenn ein normaler Benutzer den Docker-Befehl ausführt und mit „get ... dial unix /var/run/docker.sock“ aufgefordert wird und die Berechtigungen nicht ausreichen, ändern Sie die Berechtigungen von /var/run/docker.sock Verwenden Sie den Root-Benutzer, um den folgenden Befehl auszuführen.
Der obige Artikel zur Verwendung von Nicht-Root-Benutzern zum Ausführen von Skriptvorgängen in Docker-Containern ist der gesamte Inhalt, den der Editor 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:
|
<<: Lassen Sie uns über die Leistung von MySQLs COUNT(*) sprechen.
>>: Fassen Sie die allgemeinen Eigenschaften von BigIn-Funktionen in JavaScript zusammen
Konfigurationsanweisungen Linux-System: CentOS-7....
Inhaltsverzeichnis Was sind Spread- und Rest-Oper...
Einführung Closure ist eine sehr leistungsstarke ...
1. Problem Mehrere schwebende Elemente können die...
Im Folgenden werden die häufig verwendete Kopfstr...
Inhaltsverzeichnis Machen Sie das Scrollen flüssi...
In diesem Artikelbeispiel wird der spezifische Co...
Dies ist eine ziemlich coole Funktion, die Websei...
In diesem Artikelbeispiel wird der spezifische Co...
Die spezifischen Schritte zur Installation von my...
Die Fallstricke der Lese- und Schreibtrennung in ...
Oder schreiben Sie den Installationsvorgang selbs...
Vorwort: Ich bin kürzlich auf das Problem der Ins...
Wenn während des Entwicklungsprozesses nach der W...
11. Verwenden Sie JavaScript, um Seiteneffekte zu...