Docker 通过命令行向用户添加sudo权限(无密码)

Docker 通过命令行向用户添加sudo权限(无密码),docker,ubuntu,dockerfile,sudo,sudoers,Docker,Ubuntu,Dockerfile,Sudo,Sudoers,我正在从ubuntu创建一个docker文件:仿生图像 我想要一个具有sudo权限的ubuntu用户 这是我的文件 FROM ubuntu:bionic ENV DEBIAN_FRONTEND noninteractive # Get the basic stuff RUN apt-get update && \ apt-get -y upgrade && \ apt-get install -y \ sudo # Create ub

我正在从ubuntu创建一个docker文件:仿生图像

我想要一个具有sudo权限的ubuntu用户

这是我的文件

FROM ubuntu:bionic

ENV DEBIAN_FRONTEND noninteractive

# Get the basic stuff
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get install -y \
    sudo

# Create ubuntu user with sudo privileges
RUN useradd -ms /bin/bash ubuntu && \
    usermod -aG sudo ubuntu

# Set as default user
USER ubuntu
WORKDIR /home/ubuntu

ENV DEBIAN_FRONTEND teletype

CMD ["/bin/bash"]
但是有了这个密码,我需要写下ubuntu用户的密码


有一种方法可以通过命令行将NOPASSWD子句添加到sudoers文件中的sudo组?

首先,不建议您在docker中使用
sudo
。您可以使用
USER
+
gosu
设计您的行为

但是,如果您出于某种无法控制的原因坚持,只需在设置普通用户后添加下一行即可:

RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
因此,对于您的场景,可行的方案是:

FROM ubuntu:bionic

ENV DEBIAN_FRONTEND noninteractive

# Get the basic stuff
RUN apt-get update && \
    apt-get -y upgrade && \
    apt-get install -y \
    sudo

# Create ubuntu user with sudo privileges
RUN useradd -ms /bin/bash ubuntu && \
    usermod -aG sudo ubuntu
# New added for disable sudo password
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

# Set as default user
USER ubuntu
WORKDIR /home/ubuntu

ENV DEBIAN_FRONTEND teletype

CMD ["/bin/bash"]
测试效果:

$ docker build -t abc:1 .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM ubuntu:bionic
......
Successfully built b3aa0793765f
Successfully tagged abc:1

$ docker run --rm abc:1 cat /etc/sudoers
cat: /etc/sudoers: Permission denied

$ docker run --rm abc:1 sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
......
#includedir /etc/sudoers.d
%sudo ALL=(ALL) NOPASSWD:ALL

您可以看到,使用
sudo
,我们已经可以执行root所需的命令。

您不应该在Docker中需要
sudo
:容器只运行一个进程,启动它时,您可以在
Docker run
命令行显式指定用户(或者,如果您需要调试shell,
docker exec-u
可以作为备用用户启动它)。您试图打包的应用程序是什么,它需要怎样的
sudo
?您是否有足够的信息?您是正确的。但这不是我的决定。