2016-10-17 54 views
0

我不想在碼頭集裝箱內成爲root用戶。在非特權碼頭集裝箱內使用sudo不起作用

但我必須修改一些腳本中屬於根的文件。

我想爲此使用sudo。

這是我的搬運工文件:

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 

任何想法?

+0

默認情況下你會搬運工容器內的根。那麼爲什麼你需要以普通用戶身份運行應用程序? 爲什麼你需要切換到root?您可以在腳本中使用'sudo -H bash -c「hostname localhost」' –

+0

我正在爲coursera在線學習平臺創建一個分級器,並且他們只會以非特權用戶的身份啓動它。你的解決方案(sudo -H bash -c「hostname localhost」)給了我同樣的錯誤。 –

+0

...在我的本地碼頭安裝使用Ubuntu 16.04,而不是coursera ....順便說一句。 –

回答

0

感謝您的支持,這一次終於爲我工作:

export temphostname=`hostname` 
sudo su -c "echo 127.0.0.1 $temphostname >> /etc/hosts"