2014-09-15 19 views
108

Normalmente, i contenitori di finestre mobili vengono eseguiti utilizzando la radice dell'utente. Mi piacerebbe usare un utente diverso, che non è un problema usando la direttiva USER della finestra mobile. Ma questo utente dovrebbe essere in grado di utilizzare sudo all'interno del contenitore. Questo comando è mancante.Utilizzo di sudo all'interno di un contenitore di finestra mobile

Ecco un semplice Dockerfile per questo scopo:

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 

L'esecuzione di questo contenitore, vengo collegato con 'finestra mobile' utente. Quando provo ad usare sudo, il comando non viene trovato. Così ho provato a installare il pacchetto sudo dentro la mia Dockerfile utilizzando

RUN apt-get install sudo 

Questo si traduce in Impossibile trovare il pacchetto sudo

Non ho idea di come gestire questo. Eventuali suggerimenti? Grazie mille!

+0

Basta assegnare il gruppo sudo all'utente. http://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line – Regan

risposta

127

Appena preso. Come ha fatto notare Regan, ho dovuto aggiungere l'utente al gruppo sudoers. Ma il motivo principale era che avevo dimenticato di aggiornare la cache dei repository, quindi apt-get non riusciva a trovare il pacchetto sudo. Sta lavorando adesso. Ecco il codice completato:

FROM ubuntu:12.04 

RUN apt-get update && \ 
     apt-get -y install sudo 

RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo 

USER docker 
CMD /bin/bash 
+6

non funziona in centos. il comando 'adduser' sputa l'help di utilizzo per' useradd' – Emad

+0

Per CentOS, puoi aggiungere un utente e un gruppo, quindi creare un file shard sotto '/ etc/sudoers.d /' e impostare i permessi su '440' in quel file. Quindi l'utente avrebbe accesso sudo sotto CentOS, 6 e versioni successive. 5 dovrete aggiungere la direttiva '#includedir/etc/sudoers.d' in'/etc/sudoers' – Pred

+43

Per chiunque abbia questo problema con un contenitore esistente, e non necessariamente vogliono ricostruire, connettersi a il contenitore usando 'docker exec -ti -u root nome_contenitore bash' per connettersi con root priveleges. – Chris

4

Le altre risposte non hanno funzionato per me. Ho continuato a cercare e ho trovato uno blog post che riguardava il modo in cui un team stava eseguendo una radice non all'interno di un container.

Ecco il TL; DR versione:

RUN apt-get update 
RUN apt-get install sudo 

RUN adduser --disabled-password --gecos '' docker 
RUN adduser docker sudo 
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers 

USER docker 

# this is where I was running into problems with the other approaches 
RUN sudo apt-get update 

stavo usando FROM node:9.3 per questo, ma ho il sospetto che altre basi contenitore simile avrebbe funzionato pure.