Docker构建Alpine镜像时如何将用户添加到多个用户组
解决方案
Alpine 中adduser命令仅用于创建新用户,对已存在的用户重复执行该命令必然返回user userA is in use报错。给已有用户分配附属组需要使用addgroup命令,语法为:
addgroup <用户名> <目标组名>
该命令不会修改用户的主用户组,只会将用户追加为目标组的附属成员,支持对同一个用户多次执行,加入多个不同组。
修正后的Dockerfile
直接在创建完用户和组之后,追加多条addgroup指令即可,不需要安装额外依赖包:
FROM python:alpine3.16 # 先创建所需用户组 RUN addgroup --gid 2076 groupA && \ addgroup --gid 2077 groupB && \ addgroup --gid 400 groupC # 创建目标用户 RUN adduser -u 5532 -s /bin/tcsh -D userA # 将用户加入多个附属组 RUN addgroup userA groupA && \ addgroup userA groupB && \ addgroup userA groupC
验证方式
镜像构建完成后,进入容器执行id userA,即可看到用户已同时归属groupA、groupB、groupC三个附属组,输出格式类似:
uid=5532(userA) gid=1000(userA) groups=1000(userA),400(groupC),2076(groupA),2077(groupB)
注意:不要直接套用Debian/Ubuntu系的
usermod -aG写法,Alpine基础镜像默认未搭载GNU版usermod工具,使用该命令需要额外安装shadow包,会不必要地增大镜像体积,使用系统自带的addgroup是最优方案。
内容的提问来源于stack exchange,提问作者DDStackoverflow
相关产品推荐
相关产品推荐

