Docker (und dockerd?) als non-root starten

Status
Für weitere Antworten geschlossen.

dieterpohl

Benutzer
Mitglied seit
16. Apr 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

wie der Titel schon verrät, kämpfe ich derzeit damit, Docker auf meiner DS218+ als ein anderer User als root zum Laufen zu bekommen.
Der übliche Weg (wie unter https://docs.docker.com/install/linux/linux-postinstall/ empfohlen) hat leider nicht geklappt. Ich kann nun zwar als anderer User Docker-Container etc. starten, allerdings startet der Daemon weiterhin (mittels Upstart) als root. Auch alle als anderer User gestarteten Prozesse werden als root-Prozesse mittels "ps aux" angezeigt. :-/
Da dies wenig empfehlenswert ist, meine Frage: Wie habt ihr das gelöst?

Nachtrag:
Mir ist aufgefallen, dass sich meine Frage eher auf docker-compose eingrenzt.
Starte ich ganz simpel einen Container mittels
sudo -u dockeruser docker run imagename
, startet er ihn wunderbar als angegebener User "dockeruser".
Nutze ich allerdings ein compose-file und starte es mittels
sudo -u dockeruser docker-compose up -d
, klappt es nicht. Die einzelnen Container laufen dann wieder als root... :-(
 
Zuletzt bearbeitet:

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Wie wurde ermittelt, dass ein Container als dockeruser ausgeführt wurde?

Ein Container kann nur dann als dockeruser ausgeführt werden, wenn dies im Image auch vorbereitet ist.

Sobald in dem Dockerfile die USER direktive verwendet wurde, kann man dies über Paramater lösen:
docker run --user Username or UID (format: <name|uid>[:<group|gid>]) ...

in einer docker-compose.yml wird das so ausgedrückt:
Code:
version: "2.4"
services:
  meinservice:
    image: meinTollesImage
    user:  Username or UID (format: <name|uid>[:<group|gid>]) ...
...

Manche Images haben einen eigenen Mechanismus für "user mapping". Dort werden dann in Umwelt-Variable die gewünschte UID und GID mitgeteilt, Entrypoint-Skripte "ziehen das dann glatt" und starten dann den Hauptprozess mit dieser UID:GID (bspw. alle linuxserver/* Images).
 

dieterpohl

Benutzer
Mitglied seit
16. Apr 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Ich ging (vermutlich fälscherlicherweise) davon aus, dass der Prozess, der den Container startet, nicht als root laufen soll. Das war mein eigentliches Ziel. Aber hier war ich wohl auf dem Holzweg.
Docker muss Prozesse immer als root starten können, wie es scheint.
Wenn Images dann die Möglichkeit liefern, einen anderen (eingeschränkteren) Benutzer als root im Container zu verwenden, ist das wohl gut, aber wohl eher selten der Fall.

Lange Rede, kurzer Sinn: Mir ist damit geholfen, vielen Dank! :)

---

Bzgl. Docker-Version:
Auf meinem DS218+ läuft die Version 17.05.0-ce. Damit lässt sich ein compose-File in Version 3.2 tadellos starten.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Gerne!

Zu den Docker-Compose Versionen:
3.x = gedacht für Docker Swarm Deployments
2.x = gedacht für Docker Compose Deployments

Einige Konfigurationelemente wurde in 3.x neu eingeführt, andere anders "eingehangen", andere haben eine erweitere Syntax bekommen, mache wurden gestrichen. Mit Glück ignoriert Docker-Compose solche Elemente einfach nur, mit Pech weigert es sich die Konfig auszuführen. Auf Syno ist der Swarm Modus defekt, sprich eine v3.x Konfiguration bringt null Vorteil, aber dafür den Nachteil das man sich murks zurecht konfigurieren kann. Es hält einen keiner davon ab es trotzdem zu tun...
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Wenn Images dann die Möglichkeit liefern, einen anderen (eingeschränkteren) Benutzer als root im Container zu verwenden, ist das wohl gut, aber wohl eher selten der Fall.

Notfalls selber bauen :) Ein Dockerfile zu schreiben ist nicht schwer, wer Bash kann bekommt es relativ einfach hin.

Damit man nicht bei Null anfangen muss, kann man mit dem Dockerfile des Tags auf Dockerhub oder von der meist verlinkten Github-Seite (bevorzugt!) ziehen. Das kann man dann bspw. mit S6-overlay erweitern, was zwar einen Container braucht der mit root startet, aber dann den Hauptprozess mit einem eingeschränkten Benutzerkonto starten kann. S6-overlay erlaubt Vorarbeiten (Konfigurationsdateien auf Basis von ENV-Variablen verbiegen) bequem vor der Auführung des Hauptprozesses durchführen zu lassen.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.468
Punkte für Reaktionen
356
Punkte
103
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat