如何从Dockerfile向`sudo`发送密码

时间:2017-06-19 12:02:58

标签: ubuntu docker dockerfile

我正在为本地开发需求创建一个docker文件。该文件会创建一个user帐户,并以user作为密码。我认为应该运作的路线是:

# allow writes to the home directory
RUN echo "user" | sudo -S chmod 777 ~

然而,当我以交互方式运行图像时,似乎它失败了&我看到了这条消息:

mkdir: cannot create directory ‘/home/.meteor-install-tmp’: Permission 
denied

当我从容器中运行sudo -S chmod 777 ~时,它可以工作。

以下是完整的脚本:

# docker build -t timebandit/meteor-1-5 --rm .
# docker run -v /host/path:/home/code -it timebandit/meteor-1-5 bash

FROM ubuntu:xenial

# update the system
RUN apt-get update && apt-get -y install curl \
sudo \
apt-utils \
locales \
nano

# Set the locale
RUN sudo sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' 
/etc/locale.gen && \
locale-gen
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8 

# set the root password
RUN echo "root:root" | chpasswd


# create a user
RUN useradd -ms /bin/bash user
RUN adduser user sudo
RUN echo 'user:user' | chpasswd

ENV HOME=/home
WORKDIR $HOME/user

USER user
# allow writes to the home directory
ARG user_pass
RUN echo $user_pass | sudo --stdin chmod 777 /home

# install meteor
RUN echo $user_pass | sudo curl https://install.meteor.com/ | sh

2 个答案:

答案 0 :(得分:5)

我建议您完全跳过sudo,因为您可以使用Dockerfile更改用户:

....
# allow writes to the home directory
USER root
RUN chmod 777 /home
USER user
....

在图片中添加sudo意味着攻击者可以使用它。您可以在需要以root用户身份返回容器时,使用docker run选项更改docker exec-u root命令的用户。

答案 1 :(得分:2)

~是用户的主目录,而不是/home目录本身。

/home

也一样
RUN echo "user" | sudo -S chmod 777 /home

让我告诉你,你有两件事情通常是不鼓励的(Dockerfile中的密码和777 perms)。

正如@meatspace建议你可以使用docker build args:

ARG user_pass
RUN echo $user_pass | sudo -S chmod 777 /home

用这个构建:

docker build --build-arg user_pass=user (and the rest of the command)