Standardmäßig beim Ausführen
docker run -it [myimage]
ODER
docker attach [mycontainer]
Sie stellen als Root-Benutzer eine Verbindung zum Terminal her, aber ich möchte eine Verbindung als anderer Benutzer herstellen. Ist das möglich?
docker
containers
root
Andy59469
quelle
quelle
docker run --user user_name
su user_name
Antworten:
Für
docker run
:Fügen Sie einfach die Option
--user <user>
zum Wechseln zu einem anderen Benutzer hinzu, wenn Sie den Docker-Container starten.Für
docker attach
oderdocker exec
:Da der Befehl zum Anhängen / Ausführen an den vorhandenen Prozess verwendet wird, wird der aktuelle Benutzer dort direkt verwendet.
Wenn Sie wirklich eine Verbindung zu dem Benutzer herstellen möchten, den Sie haben möchten, dann
run --user <user>
oder erwähnen Sie ihn in IhrerDockerfile
VerwendungUSER
quelle
Sie können eine Shell in einem laufenden Docker-Container mit einem Befehl wie dem folgenden ausführen:
docker exec -it --user root <container id> /bin/bash
quelle
--user
Option kann weggelassen werden, wenn Befehle als root ausgeführt werden müssen, nehme ich an.USER
Anweisung angepasst werden kann , siehe docs.docker.com/engine/reference/builder/#userSie können
USER
in der Docker-Datei angeben . Alle nachfolgenden Aktionen werden mit diesem Konto ausgeführt. Sie könnenUSER
eine Zeile vor demCMD
oder angeben,ENTRYPOINT
wenn Sie diesen Benutzer nur beim Starten eines Containers verwenden möchten (und nicht beim Erstellen des Bildes). Wenn Sie einen Container aus dem resultierenden Bild starten, werden Sie als angegebener Benutzer angehängt.quelle
Der einzige Weg, wie ich es zum Laufen bringen kann, ist:
Daher muss ich sowohl die Umgebungsvariable $ USER als auch einen Punkt in der Datei / etc / passwd angeben. Auf diese Weise kann ich im Ordner / siem kompilieren und dort das Eigentum an Dateien behalten, die nicht als root vorliegen.
quelle
Meine Lösung:
Auf diese Weise kann der Benutzer beliebige Befehle mit den von bereitgestellten Tools ausführen
my-docker-image
. Beachten Sie, wie das aktuelle Arbeitsverzeichnis des Benutzers auf dem Volume/cmd
im Container bereitgestellt wird.Ich verwende diesen Workflow, um meinem Entwicklerteam das Cross-Kompilieren von C / C ++ - Code für das arm64-Ziel zu ermöglichen, dessen BSP ich verwalte (das
my-docker-image
enthält den Cross-Compiler, Sysroot, make, cmake usw.). Damit kann ein Benutzer einfach Folgendes tun:Wo
cross_compile.sh
ist das oben gezeigte Skript? Dieaddgroup/useradd
Maschinerie ermöglicht dem Benutzer das Eigentum an allen Dateien / Verzeichnissen, die durch den Build erstellt wurden.Während das bei uns funktioniert. Es scheint irgendwie hacky. Ich bin offen für alternative Implementierungen ...
quelle
Befehl als WWW-Datenbenutzer ausführen:
docker exec -t --user www-data container bash -c "ls -la"
quelle
Für
docker-compose
. In derdocker-compose.yml
:In
.env
:quelle
Als aktualisierte Antwort aus dem Jahr 2020. --user lautet die Option -u Benutzername oder UID (Format: <name | uid> [: <group | gid>]).
Dann funktioniert es bei mir so,
Referenz: https://docs.docker.com/engine/reference/commandline/exec/
quelle
Dies löste meinen Anwendungsfall: "Kompilieren Sie Webpack-Inhalte im nodejs-Container unter Windows, auf dem Docker Desktop mit WSL2 ausgeführt wird, und haben Sie die erstellten Assets unter Ihrem aktuell angemeldeten Benutzer."
Basierend auf der Antwort durch Eigenfeld . Vielen Dank!
Auch dieses Material hat mir geholfen zu verstehen, was los ist.
quelle