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

Linux 在alpine docker容器中创建用户的正确方法,以便sudo正常工作,linux,docker,dockerfile,alpine,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$ My docker文件包含以下与用户相关的命令,用于尝试和设置专门用于payara的用户。如果可能

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

mansudo

 -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.
对于用户
payara
,您既没有
SHELL
变量集,也没有
/etc/passwd
中正确的(交互式)默认SHELL集。这是因为您正在创建一个系统用户(
-S
)-此用户有一个默认的shell
/bin/false
(该shell仅使用退出代码
1
-您可以在未成功
sudo-S
后使用
echo$?
进行检查)

您可以通过不同的方式克服此问题:

a) 指定
SHELL
变量:

bash-4.4$ SHELL=/bin/bash sudo -s
bed662af470d:~# 
b) 使用
su
,它将使用默认的
root
外壳:

bash-4.4$ sudo su -
bed662af470d:~# 

c) 只需使用
sudo
直接运行所需的特权命令,而无需生成交互式shell。

作为一种快速解决方法,您可以以root用户身份连接到容器:
docker exec-u 0-i-t MYIMAGE/bin/bash
。参数
-u0
表示根用户的id,即0。