Dockerfile change usergroup without logout/login



在Docker文件中我有这个

FROM ubuntu
RUN apt update && apt -y upgrade
RUN apt install -y sudo
# Setup ops user use defaults uid 1000 gid 1000
RUN useradd -d /home/myuser -aG sudo 
&& usermod -aG sudo root  
&& echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers

当执行

docker run -dit -u 1000:1000 myimage "/bin/bash"
docker exec -it 23u898908 "/bin/bash"

myuser@23u898908$ id 
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser)
myuser@23u898908$ id myuser
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),27(sudo)
myuser@23u898908$ sudo ls
file.txt

换句话说,组正在工作,但没有显示在id命令中,但显示在id myuser命令中,只是好奇是否有我缺少的东西,或者它是设计的?如果执行

myuser@23u898908$sudo su -l myuser
$id
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),27(sudo)

预期的行为是只显示id命令的所有组,这是一个bug吗??

您必须重新登录或重新启动容器来刷新它。Id为当前会话获取它

解决。基本上,需要终止bash会话并通过在最后一个shell命令的末尾添加exit来调整Dockerfile中的上述命令来重新建立它,这将强制启动一个新的bash会话。

RUN useradd -d /home/myuser -aG sudo 
&& usermod -aG sudo root  
&& echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && exit
USER myuser
WORKDIR /home/myuser

现在当我做docker运行-dit myimage "/bin/bash"我得到$提示符,$id产生预期的结果。问题是,没有必要在docker运行命令中使用——user 1000:1000。

相关内容

  • 没有找到相关文章

最新更新