2016-07-08 8 views
0

Ich habe folgendes Dockerfile:Wie werden Docker-Befehle als Nicht-Root-Benutzer in Docker in Docker ausgeführt?

FROM docker 

RUN addgroup docker && \ 
    adduser -DH demo && \ 
    addgroup demo docker 

CMD /bin/sh 

In diesem Bild, ich bin Erstellen eines Benutzers Demo genannt, die dann zu einer Gruppe Docker genannt hinzugefügt wird. Dies ist in etwa so, wie vollwertige Umgebungen eingerichtet sind, so dass Nicht-Root-/Nicht-Sudo-Benutzer Docker-Befehle ausgeben können. Es funktioniert jedoch nicht für mich. Was vermisse ich? Ich habe versucht, den Benutzer und die Gruppen (über Benutzer- und Gruppen-IDs) dem Benutzer auf dem Host-System zuzuordnen, aber es hat immer noch nicht funktioniert. Ich führe dies in Docker für Mac Beta (1.12.0-rc3-beta18).

+0

Sie vermissen viel. Wenn Sie Apps in einem Container als Benutzer ausführen möchten, verwenden Sie: USER myuser Aber es klingt wie Sie erwarten, einen Benutzer in Docker, existieren in Gruppen auf dem Host, und verwalten Sie die Hosts Docker. Wenn Sie möchten, dass ein Andock-Container die Docker-Instanz des Hosts steuern kann ... Sie müssen die Docker-API verwenden. – user2105103

+0

@Psycho Punch Pflege, um hier mehr auf Ihren Anwendungsfall zu erarbeiten? Das Host-System weiß nichts über die Benutzer in einem Container. Von dem, was ich weiß, ist, dass Container vom Host isoliert sind. Das heißt, "container.root! = Host.root" -Benutzer. Korrigiere mich, wenn ich falsch liege. –

+0

@SamuelToh Dies ist Teil eines Experiments, das hoffentlich zum Einrichten einer Umgebung für die kontinuierliche Integration führt, die in einem Docker-Container ausgeführt wird, aber in der Lage ist, Geschwistercontainer zu erstellen. Ich versuche nicht wirklich Host-Benutzer zuzuordnen; es war nur ein explorativer Schritt. –

Antwort

0

Dies ist eine Erweiterung des Kommentars des Problems.

Der Anwendungsfall von OP besteht darin, eine Umgebung mit kontinuierlicher Integration zu untersuchen, indem die docker within docker-Architektur verwendet wird.

Von offiziellem Blog-Posting von Docker für nested containers, ja kann dies jedoch geschehen, wie weiter durch jpetazzo, Konzept Pionier Beitrag zum verschachtelten Container erklärt; Um die Architektur richtig arbeiten zu lassen, ist möglicherweise ein erheblicher Aufwand an Hatchie erforderlich, da die Verschachtelungsarchitektur hauptsächlich aufgrund der folgenden Nachteile nicht perfekt ist;

Beispiel: - „Außen Docker“

1 Sicherheitsprofil

Wenn ein Behälter ausgehend, die „innere Docker“ könnte versuchen Sicherheitsprofile anwenden, das den Konflikt stehen oder verwirren

2 - Storage

Das zweite Problem ist mit Speichertreibern verknüpft. Wenn Sie Docker in Docker ausführen, läuft der äußere Docker auf einem normalen Dateisystem (EXT4, BTRFS, was haben Sie) aber der innere Docker läuft auf einem Copy-on-Write-System (AUFS, BTRFS, Device Mapper usw., abhängig von , was der äußere Docker zu verwenden ist). Es gibt viele Kombinationen , die nicht funktionieren werden. 3 - Schwierige Wiederverwendung von Bildern in untergeordneten Containern

Und was ist mit dem Build-Cache? Das kann auch ziemlich heikel werden. Die Leute fragen mich oft: "Ich betreibe Docker-in-Docker; wie kann ich die sich Bilder auf meinem Gastgeber, anstatt alles zieht wieder in meinem inneren Docker?“

Q) mögliche Lösung für dieses Problem?

A: Ich vermute der Grund, warum OP war experimentieren mit einer verschachtelten Container-Architektur war so, dass er einen Container verwenden kann, als irgendeine Form von root, dann orchestrieren seine untergeordneten Container durch Docker Befehle?

Wenn das die Idee ist, dann ist dies immer noch durch den Standard nicht verschachtelt möglich.Das heißt, anstatt Docker-Befehle im Stream zu senden, senden Sie sie zurück an die Host-Instanz und lassen stattdessen die Host-Instanz den Befehl für Sie den Root-Container ausführen. Beispiel; Verwenden Sie docker REST api, um docker-Befehle von einem Container zu senden.

Verwandte Themen