在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。