2014-09-15 4 views
108

Обычно докерные контейнеры запускаются с использованием пользователя корень. Я хотел бы использовать другого пользователя, и это не проблема с помощью директивы USER docker. Но этот пользователь должен иметь возможность использовать sudo внутри контейнера. Эта команда отсутствует.Использование sudo внутри контейнера-докера

Вот простой Dockerfile для этой цели:

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 

Запуск этого контейнера, я получаю вход с пользователем «докер». Когда я пытаюсь использовать sudo, команда не найдена. Так что я попытался установить Судо пакет внутри моей Dockerfile используя

RUN apt-get install sudo 

Это приводит к Не удалось найти пакет для SUDO

Я понятия не имею, как управлять этим. Какие-либо предложения? Большое спасибо!

+0

Просто дайте группе sudo пользователю. http://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line – Regan

ответ

127

Только что получил. Как отметил Режан, мне пришлось добавить пользователя в группу sudoers. Но основная причина заключалась в том, что я забыл обновить кеш репозиториев, поэтому apt-get не смог найти пакет sudo. Теперь работает. Вот полный код:

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

не работает в centos. команда 'adduser' выливает справочную информацию об использовании для' useradd' – Emad

+0

Для CentOS вы можете добавить пользователя и группу, а затем создать файл осколков под '/ etc/sudoers.d /' и установить разрешения на '440' на этот файл. Тогда пользователь получит доступ к sudo в CentOS, 6 и выше. 5 вам нужно будет добавить директиву '#includedir/etc/sudoers.d' в'/etc/sudoers' – Pred

+43

Для всех, кто имеет эту проблему с существующим контейнером, и они не обязательно хотят перестраивать, подключиться к контейнер с помощью 'docker exec -ti -u root container_name bash' для подключения к корневым привилегиям. – Chris

4

Другие ответы не помогли мне. Я продолжал поиск и нашел blog post, в котором рассказывалось о том, как команда работает без полномочий root в контейнере докера.

Вот TL; DR версия:

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 

Я использовал FROM node:9.3 для этого, но я подозреваю, что другие подобные контейнеры базы будут работать.

Смежные вопросы