In Docker haben Dateien, die in Containern erstellt wurden, in der Regel einen unvorhersehbaren Besitz, 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 Nicht-Root-Benutzerkonten in den Container eingebunden sind und in das Dateisystem schreiben, werden die Eigentümer aus Host-Sicht mehr oder weniger zufällig.
Dies ist ein Problem, wenn Sie mit demselben Benutzerkonto, das die Docker-Befehle aufruft, auf Datenträgerdaten vom Host zugreifen müssen.
Typische Problemumgehungen sind
- Erzwingen von Benutzer-UIDs zur Erstellungszeit in Docker-Dateien (nicht portierbar)
- Übergeben der UID des Hostbenutzers an den
docker run
Befehl als Umgebungsvariable und Ausführen einigerchown
Befehle auf den Volumes in einem Einstiegspunktskript.
Beide 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 durchgeführt, die auf mein Desktop-Konto eingestellt sind. Ich bin mir jedoch nicht sicher, ob es den Umgang mit Dateien auf bereitgestellten Volumes erleichtern kann. Ich befürchte, dass es tatsächlich das Gegenteil sein könnte.
Angenommen, ich starte diesen Basiscontainer
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
Überprüfen Sie anschließend den Inhalt des Hosts:
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 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, die darin bestanden, UIDs zwischen dem Host und dem Container auszurichten, funktionieren aufgrund der UID->sub-UID
im Namespace auftretenden Zuordnung nicht mehr .
Gibt es dann eine Möglichkeit, Docker mit aktiviertem Benutzernamensraum auszuführen (um die Sicherheit zu verbessern), während der Hostbenutzer, der Docker ausführt, weiterhin die auf Volumes generierten Dateien besitzen kann?