Docker 通过命令行向用户添加sudo权限(无密码)
我正在从ubuntu创建一个docker文件:仿生图像 我想要一个具有sudo权限的ubuntu用户 这是我的文件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
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
?您是否有足够的信息?您是正确的。但这不是我的决定。