在高山docker容器中创建用户的正确方法,以便sudo正常工作

时间:2018-10-22 12:11:57

标签: linux docker dockerfile alpine

当尝试使用 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.

1 个答案:

答案 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。