Docker und --userns-remap, wie verwalte ich Volume-Berechtigungen für die gemeinsame Nutzung von Daten zwischen Host und Container?

n Docker haben Dateien, die in Containern erstellt wurden, in der Regel unvorhersehbare Eigentumsrechte, während sie vom Host aus überprüft werden. Der Eigentümer der Dateien auf einem Volume ist standardmäßig root (UID 0). Sobald jedoch Benutzer ohne Rootberechtigung an dem Container beteiligt sind und in das Dateisystem schreiben, werden die Eigentümer aus Sicht des Hosts mehr oder weniger zufällig.

Es ist ein Problem, wenn Sie über dasselbe Benutzerkonto, das die Docker-Befehle aufruft, vom Host auf Volumendaten zugreifen müssen.

Typische Problemumgehungen sind

UIDs der Benutzer beim Erstellen in Dockerfiles erzwingen (nicht portierbar)Übergabe der UID des Hostbenutzers an dasdocker run Befehl als Umgebungsvariable und dann einige @ ausführchown -Befehle auf den Datenträgern in einem Zwischenpunktskript.

Beide diese Lösungen können eine gewisse Kontrolle über die tatsächlichen Berechtigungen außerhalb des Containers geben.

Ich habe erwartet, dass Benutzernamensräume die endgültige Lösung für dieses Problem darstellen. Ich habe einige Tests mit der kürzlich veröffentlichten Version 1.10 und --userns-remap ausgeführt, die auf mein Desktop-Konto eingestellt sind. Ich bin mir jedoch nicht sicher, ob dies den Umgang mit Dateieigentümern auf bereitgestellten Volumes erleichtert. Ich befürchte, dass das Gegenteil der Fall sein könnte.

Angenommen, ich starte diesen Basiscontainer

docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit

Und überprüfen Sie dann den Inhalt vom Host:

ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/

-rw-r--r-- 1 100000 100000 6 Feb  8 19:43 test.txt

Diese Nummer "100000" ist eine Unter-UID meines Hostbenutzers. Da sie jedoch nicht der UID meines Benutzers entspricht, kann ich die Datei "test.txt" immer noch nicht ohne Berechtigungen bearbeiten. Dieser Unterbenutzer scheint keine Affinität zu meinem tatsächlichen regulären Benutzer außerhalb von Docker zu haben. Es ist nicht zurück abgebildet.

Die zuvor in diesem Beitrag erwähnten Problemumgehungen, bei denen die UIDs zwischen dem Host und dem Container ausgerichtet wurden, funktionieren aufgrund des @ nicht mehUID->sub-UID Zuordnung, die im Namespace auftritt.

Gibt es dann eine Möglichkeit, Docker mit aktiviertem Benutzernamensraum auszuführen (um die Sicherheit zu verbessern), während es dem Host-Benutzer, der Docker ausführt, dennoch möglich ist, die auf Volumes generierten Dateien zu besitzen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage