Benutzer in das Docker-Image zu einem Nicht-Root-Benutzer wechseln
Ich versuche, Benutzer wechseln um den Benutzer tomcat7, um auf setup-SSH-Zertifikaten.
Wenn ich su tomcat7
passiert nichts.
whoami
noch ruturns Wurzel nach su tomcat7
Tun, eine more /etc/passwd
bekomme ich das folgende Ergebnis, das deutlich zeigt, dass ein tomcat7 Benutzer vorhanden ist:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:104::/var/run/dbus:/bin/false
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false
saned:x:103:106::/home/saned:/bin/false
tomcat7:x:104:107::/usr/share/tomcat7:/bin/false
Was ich versuche zu umgehen, ist dieser Fehler in Hudson:
Command "git fetch -t git@________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed.
Dies ist mein Dockerfile, es dauert ein vorhandenes hudson war-Datei und die config, die ist asphaltiert und baut ein Bild, hudson läuft wunderbar, nur es kann kein Zugriff auf git durch Zertifikate nicht vorhanden für den Benutzer tomcat7.
FROM debian:wheezy
# install java on image
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk tomcat7
# install hudson on image
RUN rm -rf /var/lib/tomcat7/webapps/*
ADD ./ROOT.tar.gz /var/lib/tomcat7/webapps/
# copy hudson config over to image
RUN mkdir /usr/share/tomcat7/.hudson
ADD ./dothudson.tar.gz /usr/share/tomcat7/
RUN chown -R tomcat7:tomcat7 /usr/share/tomcat7/
# add ssh certificates
RUN mkdir /root/.ssh
ADD ssh.tar.gz /root/
# install some dependencies
RUN apt-get update
RUN apt-get install --y maven
RUN apt-get install --y git
RUN apt-get install --y subversion
# background script
ADD run.sh /root/run.sh
RUN chmod +x /root/run.sh
# expose port 8080
EXPOSE 8080
CMD ["/root/run.sh"]
Ich bin mit der aktuellen version von Docker (Docker version 1.0.0, bauen 63fe64c/1.0.0), ist das ein Fehler im Andockfenster oder bin ich etwas fehlt in meinem Dockerfile?
USER
Dockerfile Anleitung? RUN
nach USER
- Anweisung erfolgt unter der entsprechenden uid, also ich bin mir zwar nicht sicher, ob ich vollkommen verstehen Ihr problem, es sieht könnte es das sein, was du bist suchen für. COPY
- Dateien erstellt, die als uid 0, was bedeutet, dass Sie sind nicht beschreibbar, die durch die nicht-root-Benutzer, und die Ausführung von AUSFÜHREN chown ...
auf diese Dateien wird nicht funktionieren, wenn der aktuelle Benutzer auch root. So landet man hin-und herschalten zwischen root und die anderen Benutzer in das Dockerfile. InformationsquelleAutor der Frage Jan Vladimir Mostert | 2014-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden
su
in einem dockerfile, jedoch sollten Sie dieUSER
Unterricht im Dockerfile.In jeder Phase des Dockerfile bauen, ein neuer container angelegt, so dass jede änderung, die Sie vornehmen, der Benutzer wird nicht weiter auf der nächsten build-Phase.
Beispiel:
Diese würden nie sagen, dass die user wäre
test
als ein neuer container erzeugt wird, auf der 2. whoami. Die Ausgabe wäre root auf beiden (außer natürlich, Sie führen Sie den BENUTZER vorher).Wenn Sie jedoch tun:
Sollten Sie sehen
root
danntest
.Alternativ können Sie einen Befehl ausführen als anderer Benutzer mit sudo mit so etwas wie
Aber es scheint besser zu nutzen, die offiziell unterstützte Instruktion.
InformationsquelleAutor der Antwort Marcus Hughes
Als einen anderen Ansatz, um die andere zu beantworten, statt auf den Benutzer bei der Bild-Erzeugung auf dem Dockerfile, können Sie dies über die Befehlszeile auf einem bestimmten container als pro-Befehl-basis.
Mit
docker exec
verwenden--user
angeben, welches Konto das interaktive terminal (container sollten ausgeführt werden und der Benutzer hat zu existieren, in der Container-system):Sehen https://docs.docker.com/engine/reference/commandline/exec/
InformationsquelleAutor der Antwort That Brazilian Guy
Gibt es keine wirkliche Möglichkeit, dies zu tun. Als Ergebnis Dinge wie mysqld_safe fehl, und Sie können nicht installiert werden mysql-server unter Debian docker-container ohne springen durch 40 Reifen, weil.. naja... es bricht ab, wenn er nicht root ist.
Können Sie BENUTZER, aber Sie werden nicht in der Lage sein, um apt-get zu installieren, wenn man nicht 'root'.
InformationsquelleAutor der Antwort John Moser