Как использовать sudo внутри контейнера docker?

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

вот простой 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

запуск этого контейнера, я вошел в систему с пользователем "docker". Когда я пытаюсь использовать sudo, команда не найдена. Поэтому я попытался установить судо пакет внутри моего Dockerfile с помощью

RUN apt-get install sudo

в результате не удается найти пакет sudo

5 ответов


только что получил его. Как отметила Риган, мне пришлось добавить пользователя в группу 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

другие ответы не работает для меня. Я продолжал искать и нашел блоге это охватывало, как команда работает без root внутри контейнера docker.

вот версия 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 для этого, но я подозреваю, что другие подобные контейнерные базы также будут работать.


когда ни sudo, ни apt-get не доступны в контейнере, вы также можете перейти в запущенный контейнер как пользователь root с помощью команды

docker exec -u root -t -i container_id /bin/bash

Если вы хотите подключиться к контейнер и установить что-то
использование apt-get
во-первых, как выше ответ от нашего брата "Tomáš Záluský"

docker exec -u root -t -i container_id /bin/bash

потом попробуй

запустите apt-get update или apt-get 'anything you want'

это сработало со мной надеюсь, это полезно для всех


если у вас есть контейнер, работающий как root, который запускает скрипт (который вы не можете изменить), который нуждается в доступе к sudo команда, вы можете просто создать новый sudo сценарий в своем $PATH это вызывает переданную команду.

например, в вашем Dockerfile:

RUN if type sudo 2>/dev/null; then \ 
     echo "The sudo command already exists... Skipping."; \
    else \
     echo -e "#!/bin/sh\n${@}" > /usr/sbin/sudo; \
     chmod +x /usr/sbin/sudo; \
    fi