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

895   5  

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

    Ничего не найдено.