#docker #sudo #hostname
#docker #sudo #имя хоста
Вопрос:
Я не хочу быть root внутри контейнера docker.
Но я должен изменить некоторые файлы, которые принадлежат root в скрипте.
Я хочу использовать sudo для этого.
Это мой файл docker:
FROM ubuntu:16.04
RUN apt-get update
RUN apt-get install -y curl wget python openssh-server sudo
RUN mkdir /grader
RUN mkdir /grader/week1
RUN mkdir /grader/week1/assignment2
ADD executeGrader.sh /grader/
RUN groupadd -g 1000 coursera
RUN useradd -g 1000 -u 1000 --shell /bin/bash coursera
RUN usermod -a -G sudo coursera
RUN mkdir /home/coursera
RUN chown coursera:coursera /home/coursera
RUN echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
RUN echo "coursera ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN chmod 777 /etc/hostname
USER coursera
EXPOSE 8080
EXPOSE 8081
ENTRYPOINT ["/grader/executeGrader.sh"]
executeGrader.sh содержит этот:
#!/bin/bash
id
sudo -u root -H bash -c "hostname localhost"
Но я понимаю это :/
>>docker run -h sdfsdfsdf323 -u 1000:1000 -P stackoverflow
uid=1000(coursera) gid=1000(coursera) groups=1000(coursera)
hostname: you must be root to change the host name
Есть идеи?
Комментарии:
1. По умолчанию вы будете root внутри контейнера docker. Тогда зачем вам нужно запускать приложение как обычный пользователь? Зачем вам нужно переключаться на root? Вы можете просто использовать
sudo -H bash -c "hostname localhost"
в своем скрипте2. Я создаю грейдер для онлайн-платформы обучения coursera, и они запускают его только с непривилегированным пользователем. Ваше решение (sudo -H bash -c «имя хоста localhost») выдает мне ту же ошибку.
3. … на моей локальной установке docker с использованием Ubuntu 16.04, а не на coursera …. кстати.
4. Проверьте этот ответ — cap-add SYS_ADMIN . а также ответ vasi
Ответ №1:
Спасибо за вашу поддержку, это наконец-то сработало для меня:
export temphostname=`hostname`
sudo su -c "echo 127.0.0.1 $temphostname >> /etc/hosts"