Как использовать 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