我正在尝试使用特定用户组执行命令,如链接问题中所述(如何与特定组一起运行流程?)在 Alpine Linux 上,但系统显示“未找到”
~/work $ sg
sh: sg: not found
我检查了shadow
包apk info -a shadow
,看起来sg
命令存在:
[...]
cmd:pwunconv
cmd:sg
cmd:su
[...]
shadow
Alpine 上的包参考:https://pkgs.alpinelinux.org/contents?branch=edge&name=shadow&arch=x86&repo=community
答案1
我今天使用最新的 alpine (3.16.0) 图像遇到了同样的错误。命令sg
又消失了。我不得不切换回 3.15.4:
docker run --rm alpine:3.15.4 sh -c "apk add shadow && sg root -c id"
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
有效,而 3.16.0 则无效:
docker run --rm alpine:3.16.0 sh -c "apk add shadow && sg root -c id"
sh: sg: not found
答案2
sg 迁移到shadow-login 包
apk add shadow-login
https://pkgs.alpinelinux.org/package/v3.16/community/x86_64/shadow-login
您可以使用此搜索工具来查找二进制文件:
https://pkgs.alpinelinux.org/contents?file=sg&path=&name=&branch=v3.16&repo=community&arch=x86_64
答案3
Alpine Linux 的设计占用空间非常小(它最初是为嵌入式 Linux 设计的),并且它的所有 shell 命令都是通过“忙碌盒”。还有其他特殊性,例如不常见的库,使其难以用于容器。
这就是说,我想知道为什么你需要在容器中执行此操作,因为你可以在构建容器映像时设置任何文件的 id 和组,并使用任何 id 运行容器。