我正在尝试写我的第一个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
对于很长的帖子,我们深表歉意,请让我对此有所了解
答案 0 :(得分:0)
您收到一个明确的错误:
sudo: no tty present and no askpass program specified
如果要搜索该确切的错误消息,您会发现在sudoers
配置中设置了requiretty
标志时会发生这种情况。您可以在手册页的SUDOERS OPTIONS部分中了解有关此内容的更多信息。
但是:
我什至需要创建新用户吗?以root用户身份在容器中运行就可以了吗?
在 build 过程中以root
的身份运行绝对是可以的。在某些情况下,您可能希望创建一个非root用户以在运行容器时使用,但是在sudo
中使用Dockerfile
毫无意义(因为您已经 以root
的身份运行。)
如何在图像内添加sudo特权的新用户和组。
您已经在做正确的事情:创建一个新用户并将该用户添加到sudoers
组中。