Как использовать sudo внутри контейнера docker?
обычно контейнеры docker запускаются с помощью пользователя 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
другие ответы не работает для меня. Я продолжал искать и нашел блоге это касалось того, как команда выполняла некорневые внутри контейнера 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
во-первых, как выше ответ от нашего брата "Záluský Томаш"docker exec -u root -t -i container_id /bin/bashпотом попробуй
запустите apt-get update или apt-get 'все, что вы хотите'
он работал со мной надеюсь, что это полезно для всех
если у вас есть контейнер, работающий как 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
Comments