2016-12-09 6 views
0

Моя проблема заключается в следующем: мне нужно запустить контейнер с запущенной службой dnsmasq (но это может быть любая служба). Трудность заключается в том, что я создал пользователя на моем изображении, поэтому, когда я создаю контейнер из него, он начинается с моего пользовательского пользователя (без root).Запуск процесса в файле Docker

Поэтому, как я могу запустить службу, которая требует прав root (sudo service dnsmasq start), с пользователем без полномочий root?

Возможные решения:

  • быть в состоянии начать контейнер служба уже запущена. Из того, что я понимаю, невозможно запустить службу в файле Docker, поскольку он не сохраняет состояние, только FS
  • запускает контейнер с правами пользователя root, запустит службу и затем вернется к пользователю. Это может сработать, но потенциально может возникнуть проблема безопасности
  • Позвольте моему пользовательскому пользователю иметь право запускать сервис самостоятельно. Как это сделать ?
  • не использовать пользовательский пользователь (вероятно, самый простой способ, но эй? Где удовольствие? :))

Любое другое решение?

+1

Как насчет этого ответа: http://askubuntu.com/a/90727 . Затем вы можете установить его, чтобы пользователю не нужно вводить пароль с помощью 'NOPASSWD'. – Rickkwa

ответ

0

Благодаря Rickkwa комментарий, я был в состоянии решить эту проблему:

В Dockerfile (как корень):

# Install and configure Dnsmasq 
RUN apt-get update && apt-get install -y dnsmasq 
# Need to add a new line 
RUN echo '' >> /etc/dnsmasq.conf 
# See https://github.com/nicolasff/docker-cassandra/issues/8 
RUN echo 'user=root' >> /etc/dnsmasq.conf 
# Add the needed route 
RUN echo 'address=/my-domain.com/<my_ip>' >> /etc/dnsmasq.conf 

# Allow my user's group to start the service 
RUN echo ''%${group}' ALL=NOPASSWD:/usr/sbin/service dnsmasq *' >> /etc/sudoers 

# Switch to the right user, that belongs to the group ${group} 
USER ${user} 

Затем, когда ваши старты контейнеров (в EntryPoint, например), добавьте следующую строку:

sudo service dnsmasq start 

Помните NOPASSWD в файлах /etc/sudoers? Это мешает системе запрашивать пароль пользователя при запуске службы.

-1

Что об использовании EntryPoint, что сценарий запуска оболочки, чтобы сделать то, что вы хотите

+0

Это не сработает, потому что пользователь, с которого я запускаю контейнер, не имеет необходимых прав. –

+0

вы можете использовать что-то вроде этого CMD SUDO [ «/usr/startup.sh»] или вы можете изменить пользователя в dockerfile с помощью этого пользователя [ваш_пользователь] –

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