Hinweis: StackOverflow stellt die folgende Frage: Wie können Berechtigungen für freigegebene Docker-Volumes am besten verwaltet werden? die ähnlich zu den oben genannten und zahlreichen Antworten, mit der vorherrschenden Antwort da dies ein .
Beim Experimentieren und beim Lesen zahlreicher Quellen, die nach einer verbindlichen Antwort oder einem gemeinsamen Muster suchen, habe ich Folgendes identifiziert:
Beim Ausführen von Docker-Outside-of-Docker (DooD) werden Host-Daten-Volumes vom zugrunde liegenden Host bereitgestellt. Ich erinnere mich, dass ich in einem Blogbeitrag über einige Erwähnungen gestolpert bin, aber für mein Leben kann ich es jetzt nicht finden (wenn / wenn ich dies tue, werde ich diese Antwort aktualisieren). Kurz und bündig: Wenn Sie Docker über einen gemeinsam genutzten docker.sock
Container in einem Container ausführen, versucht Docker, Volumes vom zugrunde liegenden Host aus bereitzustellen . Wenn Sie Volumes aus einem anderen Container bereitstellen, ist dieses Problem nicht aufgetreten.
Zuweisen von Berechtigungen und Besitz Das Problem, das ich oben erwähnt habe ( setfacl
ohne Funktionieren), scheint ein Benutzerproblem gewesen zu sein. Ich muss versucht haben, es unter den Berechtigungen des Nicht-Root-Benutzers oder für ein Verzeichnis auszuführen, an dem mein Benutzer keinen Besitz hatte. Um Eigentumsprobleme zu umgehen, können Sie ein docker-entrypoint.sh
Skript verwenden, das entweder chown
oder setfacl
als Root-Benutzer vor dem Ausführen des Befehls als Benutzer für das Image verwendet wird. Bis jetzt habe ich zwei mögliche Optionen zur Behandlung von Besitz- und Berechtigungsproblemen identifiziert:
- Verwenden Sie
sudo
diese Option, um den Besitzer zu ändern oder Zugriffssteuerungslisten festzulegen. - Lassen Sie den Container mit dem
root
Benutzer laufen und gehen Sie zu einem anderen Benutzer über, um den Befehl mit gosu oder su-exec auszuführen .
Ich habe die beiden obigen Beobachtungen für meinen selbstverschreibenden Ansatz kombiniert, also ...
- Beim Einhängen eines Host-Volumes in einen Docker-Container, der auch das Host-Volume verwendet
docker.sock
, wird empfohlen, dass die Verzeichnisse übereinstimmen. Wenn zum Beispiel das Volume mount in der Dockerfile als/var/data
dann mount/var/data
vom Host deklariert wird (z-v /var/data:/var/data
. B. ). Dies ist insbesondere dann der/var/data
Fall, wenn Sie Dateien oder Verzeichnisse haben, unter denen Sie aus dem Container einen neuen Container bereitstellen möchten. - Seien Sie proaktiv in Bezug auf Berechtigungen. Fügen Sie immer eine
docker-entrypoint.sh
Datei hinzu, die zumindest den Besitz oder die Zugriffskontrolle für ein eingehängtes Verzeichnis aktualisiert.