509 Stimmen

Wie man sudo innerhalb eines Docker-Containers verwendet?

Normalerweise werden Docker-Container unter Verwendung des Benutzers root ausgeführt. Ich möchte einen anderen Benutzer verwenden, was kein Problem ist, wenn man die USER-Anweisung von Docker verwendet. Aber dieser Benutzer sollte innerhalb des Containers sudo verwenden können. Diese Befehl fehlt.

Hier ist ein einfaches Dockerfile für diesen Zweck:

FROM ubuntu:12.04

RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker

USER docker
CMD /bin/bash

Bei der Ausführung dieses Containers werde ich mit dem Benutzer 'docker' angemeldet. Wenn ich versuche, sudo zu verwenden, wird der Befehl nicht gefunden. Also habe ich versucht, das sudo-Paket in meinem Dockerfile zu installieren mit

RUN apt-get install sudo

Dies führt zu Paket sudo konnte nicht gefunden werden

2voto

XtraSimplicity Punkte 5136

Wenn Sie einen Container als root ausführen, der ein Skript ausführt (das Sie nicht ändern können) und Zugriff auf den Befehl sudo benötigt, können Sie einfach ein neues sudo-Skript in Ihrem $PATH erstellen, das den übergebenen Befehl aufruft.

Zum Beispiel in Ihrer Dockerdatei:

RUN if type sudo 2>/dev/null; then \ 
     echo "Der sudo Befehl existiert bereits... Überspringen."; \
    else \
     echo -e "#!/bin/sh\n\${@}" > /usr/sbin/sudo; \
     chmod +x /usr/sbin/sudo; \
    fi

2voto

Erkan Şirin Punkte 1727

Ein Beispiel Dockerfile für Centos7. In diesem Beispiel fügen wir prod_user mit sudo-Berechtigung hinzu.

FROM centos:7

RUN yum -y update && yum clean all

RUN yum -y install openssh-server  python3 sudo

RUN adduser -m prod_user && \
    echo "MyPass*49?" | passwd prod_user --stdin && \
    usermod -aG wheel prod_user && \
    mkdir /home/prod_user/.ssh && \
    chown prod_user:prod_user -R  /home/prod_user/ && \
    chmod 700 /home/prod_user/.ssh

RUN echo "prod_user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers

RUN echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config

RUN systemctl enable sshd.service

VOLUME [ "/sys/fs/cgroup" ]

ENTRYPOINT ["/usr/sbin/init"]

0voto

Animesh Punkte 74

Es gibt keine Antwort darauf, wie man dies unter CentOS macht. Auf Centos können Sie Folgendes zur Dockerdatei hinzufügen

RUN echo "Benutzer ALLE=(root) NOPASSWD:ALLE" > /etc/sudoers.d/Benutzer && \
    chmod 0440 /etc/sudoers.d/Benutzer

0voto

Ich benutze ein Ubuntu-Image und hatte beim Verwenden des Docker-Desktops dieses Problem.

Folgendes hat das Problem gelöst:

  1. apt-get update
  2. apt-get install sudo

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