如何将sudo特权用户和组添加到docker容器

时间:2018-06-20 18:22:55

标签: ubuntu docker docker-compose dockerfile

我正在尝试写我的第一个Dockerfile。但是我失败了。我只是想避免在容器内使用 root 用户。这是我手动执行的操作,如何使用Dockerfile完成此步骤?

启动ubuntu基本映像:
docker run -dit --name "my-container" -p 3000:3000 ubuntu:16.04

输入:
docker exec -it my-container /bin/bash

然后我正在执行以下步骤:

export DEBIAN_FRONTEND=noninteractive *(without adding these there were many error, warnings while installing packages)*
apt-get update && apt-get install -y sudo curl git
adduser myuser
usermod -aG sudo myuser
su myuser
cd ~

已设置Myuser。因此,我永远不会再次登录到root用户,而使用我新创建的用户。然后,我安装nodejs,yarn软件包管理器,最后克隆我的仓库并运行代码。

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - *(These steps asks user sudo password)*
sudo apt-get install -y nodejs
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
git clone https://github.com/myaccount/myrepo.git
cd myrepo
yarn install
yarn build
yarn start

这是我打算对此图像进行处理的基本程序。
在这里,我尝试将步骤复制到Dockerfile

FROM ubuntu:16.04
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
    apt-get install -y sudo curl git
RUN useradd -ms /bin/bash myuser && echo "myuser:myuser" | chpasswd && adduser myuser sudo (I just copy pasted this line from other question)
USER myuser
WORKDIR /home/myuser
RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - && \
    sudo apt-get install -y nodejs && \
    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && \
    sudo apt-get update && sudo apt-get install yarn && \
    sudo rm -rf /var/lib/apt/lists/*
RUN git clone https://github.com/myaccount/myrepo.git && \
    cd myrepo && \
    yarn install && \
    yarn build
CMD ["yarn", "start"]
EXPOSE 3000

但这在步骤7/10中给了我这个错误:
sudo:不存在tty且未指定AskPass程序
The command '/bin/sh -c curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - && sudo apt-get install -y nodejs && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list && sudo apt-get update && sudo apt-get install yarn && sudo rm -rf /var/lib/apt/lists/*' returned a non-zero code: 1

对于很长的帖子,我们深表歉意,请让我对此有所了解

  • 我什至需要创建新用户吗?以root用户身份在容器中运行是否还可以?
  • 如何在图像内添加sudo特权新用户和组。
  • 那我该如何通过询问sudo密码的步骤?

1 个答案:

答案 0 :(得分:0)

您收到一个明确的错误:

sudo: no tty present and no askpass program specified

如果要搜索该确切的错误消息,您会发现在sudoers配置中设置了requiretty标志时会发生这种情况。您可以在手册页的SUDOERS OPTIONS部分中了解有关此内容的更多信息。

但是:

  

我什至需要创建新用户吗?以root用户身份在容器中运行就可以了吗?

build 过程中以root的身份运行绝对是可以的。在某些情况下,您可能希望创建一个非root用户以在运行容器时使用,但是在sudo中使用Dockerfile毫无意义(因为您已经 root的身份运行。)

  

如何在图像内添加sudo特权的新用户和组。

您已经在做正确的事情:创建一个新用户并将该用户添加到sudoers组中。