当尝试使用 alpine 3.8 在docker容器中执行sudo
时,我得到以下输出。
我已使用docker exec -i -t MYIMAGE /bin/bash
bash-4.4$ whoami
payara
bash-4.4$ sudo -s
bash-4.4$ whoami
payara
bash-4.4$ su root
su: incorrect password
bash-4.4$
我的docker文件包含以下与用户相关的命令,以尝试并专门为payara设置用户。我希望sudo能够正常工作。
DockerFile
FROM "alpine:latest"
ENV LANG C.UTF-8
ENV http_proxy 'http://u:p@160.48.234.129:80'
ENV https_proxy 'http://u:p@160.48.234.129:80'
RUN apk add --no-cache bash gawk sed grep bc coreutils git openssh-client libarchive libarchive-tools busybox-suid sudo
RUN addgroup -S payara && adduser -S -G payara payara
RUN echo "payara ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# CHANGE TO PAYARA USER
USER payara
... rest of setup.
答案 0 :(得分:1)
来自man sudo
:
-s, --shell
Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry.
您既没有设置SHELL
变量,也没有在/etc/passwd
中为用户payara
设置正确的(交互式)默认外壳程序。这是因为您正在创建系统用户(-S
)-该用户具有默认的外壳程序/bin/false
(该外壳程序仅以退出代码1
退出-您可以使用echo $?
进行检查sudo -s
失败之后。
您可以通过不同的方式克服这一点:
a)指定SHELL
变量:
bash-4.4$ SHELL=/bin/bash sudo -s
bed662af470d:~#
b)使用su
,它将使用默认的root
的外壳:
bash-4.4$ sudo su -
bed662af470d:~#
c)只需直接使用sudo
运行所需的特权命令,而无需生成交互式shell。