544 Stimmen

Wie füge ich Benutzer zu einem Docker-Container hinzu?

Ich habe einen Docker-Container mit einigen Prozessen (uwsgi und Celery), die darin ausgeführt werden. Ich möchte einen Celery-Benutzer und einen uwsgi-Benutzer für diese Prozesse erstellen, sowie eine Arbeitsgruppe, der sie beide angehören werden, um Berechtigungen zuzuweisen.

Ich habe versucht, RUN adduser uwsgi und RUN adduser celery zu meiner Docker-Datei hinzuzufügen, aber das verursacht Probleme, da diese Befehle eine Eingabeaufforderung anzeigen (ich habe die Antworten aus dem Build unten gepostet).

Was ist der beste Weg, Benutzer zu einem Docker-Container hinzuzufügen, um Berechtigungen für die im Container ausgeführten Worker festzulegen?

Mein Docker-Image wird von der offiziellen Ubuntu14.04-Basis erstellt.

Hier ist die Ausgabe aus der Docker-Datei, wenn die adduser-Befehle ausgeführt werden:

Benutzer `uwsgi' hinzufügen ...
Neue Gruppe `uwsgi' hinzufügen (1000) ... 
Neuen Benutzer `uwsgi' (1000) mit Gruppe `uwsgi' hinzufügen ... 
Home-Verzeichnis `/home/uwsgi' erstellen ...
Dateien von `/etc/skel' kopieren ... 
[91mNeues UNIX-Passwort eingeben: Neues UNIX-Passwort erneut eingeben: [0m 
[91mpasswd: Authentifizierungs-Token-Manipulationsfehler
passwd: Passwort nicht geändert
[0m 
[91mVerwendung von nicht initialisierten Wert $answer in chop bei /usr/sbin/adduser Zeile 563.
[0m 
[91mVerwendung von nicht initialisiertem Wert $answer beim Musterabgleich (m//) bei /usr/sbin/adduser Zeile 564.
[0m 
Erneut versuchen? [j/N] 
Benutzerinformationen für uwsgi ändern
Den neuen Wert eingeben oder die Eingabetaste für den Standardwert drücken
    Vollständiger Name []: 
Raumnummer []:     Arbeitsnummer []:  Telefonnummer zuhause []:  Andere []: 
[91mVerwendung von nicht initialisiertem Wert $answer in chop bei /usr/sbin/adduser Zeile 589.
[0m 
[91mVerwendung des nicht initialisierten Wertes $answer im Musterabgleich (m//) bei /usr/sbin/adduser Zeile 590.
[0m 
Ist die Information korrekt? [J/n] 
---> 258f2f2f13df 
Zwischencontainer 59948863162a wird entfernt 
Schritt 5 : RUN adduser celery 
---> Ausführen in be06f1e20f64 
Benutzer `celery' hinzufügen ...
Neue Gruppe `celery' hinzufügen (1001) ... 
Neuen Benutzer `celery' (1001) mit Gruppe `celery' hinzufügen ... 
Home-Verzeichnis `/home/celery' erstellen ...
Dateien von `/etc/skel' kopieren ... 
[91mNeues UNIX-Passwort eingeben: Neues UNIX-Passwort erneut eingeben: [0m 
[91mpasswd: Authentifizierungs-Token-Manipulationsfehler
passwd: Passwort nicht geändert
[0m 
[91mVerwendung von nicht initialisierten Wert $answer in chop bei /usr/sbin/adduser Zeile 563.
[0m 
[91mVerwendung von nicht initialisiertem Wert $answer beim Musterabgleich (m//) bei /usr/sbin/adduser Zeile 564.
[0m 
Erneut versuchen? [j/N] 
Benutzerinformationen für celery ändern
Den neuen Wert eingeben oder die Eingabetaste für den Standardwert drücken
    Vollständiger Name []:   Raumnummer []:     Arbeitsnummer []: 
Telefonnummer zuhause []:  Andere []: 
[91mVerwendung von nicht initialisiertem Wert $answer in chop bei /usr/sbin/adduser Zeile 589.
[0m 
[91mVerwendung des nicht initialisierten Wertes $answer im Musterabgleich (m//) bei /usr/sbin/adduser Zeile 590.
[0m 
Ist die Information korrekt? [J/n]

21voto

Asclepius Punkte 48774

Jeder hat seinen persönlichen Favoriten, und das ist meiner:

RUN useradd --user-group --system --create-home --no-log-init app
USER app

Referenz: man useradd (alt)

Die RUN-Zeile oben wird den Benutzer und die Gruppe app hinzufügen:

root@ef3e54b60048:/# id app
uid=999(app) gid=999(app) groups=999(app)

Verwenden Sie einen spezifischeren Namen als app, wenn das Abbild als Basisbild wiederverwendet werden soll. Fügen Sie als zusätzliche Information --shell /bin/bash hinzu, wenn Sie es wirklich benötigen.


Teilweise crédit: Antwort von Ryan M

6voto

Lukasz Dynowski Punkte 8011

Alternativ können Sie dies tun.

RUN addgroup demo && adduser -DH -G demo demo

Der erste Befehl erstellt eine Gruppe namens demo. Der zweite Befehl erstellt einen Benutzer mit dem Namen demo und fügt ihn der zuvor erstellten Gruppe demo hinzu.

Die Flags stehen für:

-G Gruppe
-D Kein Passwort zuweisen
-H Kein Home-Verzeichnis erstellen

3voto

elmerzouki Punkte 11
WORKDIR /api

RUN adduser -D nameuser

COPY --from=builder --chown=nameuser:nameuser /api

USER nameuser

2voto

linux.cnf Punkte 323

Bitte fügen Sie die folgenden Einträge in die Dockerfile ein, um einen sudo-Benutzer im Container zu erstellen.

RUN useradd -m  -s /bin/bash ubuntu
RUN usermod -aG sudo ubuntu && echo "ubuntu ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ubuntu
RUN chmod 0440 /etc/sudoers.d/ubuntu // sollte 0440 sein
USER ubuntu:ubuntu
WORKDIR /home/ubuntu

0voto

basickarl Punkte 31184

Fügen Sie diese Zeile Ihrer Dockerdatei hinzu (Sie können so jeden Linux-Befehl ausführen)

RUN useradd -ms /bin/bash IhrNeuerBenutzername

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X