如果我有一个使用buildah mount
.我使用文档指定的相同方式,
mnt=$(buildah mount $ctr)
如果我调用我的脚本sh ./build.sh
,我会得到
无法在无根模式下使用驱动程序覆盖进行安装。您需要在
buildah unshare
会话中运行它
问题是如果此处发生故障,脚本不会终止。我可以通过测试来检查它if [-z $mnt]; then echo "Run with buildah-unshare; exit; fi
,但这并不理想,因为那样我仍然有buildah from
我在无谓地做事的先验。
如果您尝试支持无根 buildah,有没有办法确保您在 下运行 buildah buildah unshare
?
答案1
一种方法是确保 root 用户已映射到某个用户。如果您cat /proc/self/uid_map
在主用户名空间上运行,您将看到 uid=0 被映射到 0,表示所有用户的长度4294967295
。这是一个虚拟映射(请参阅 参考资料man namespaces
获取更多信息)。
$ cat /proc/self/uid_map
0 0 4294967295
如果该虚拟映射是不是在该文件中,您位于子用户命名空间中。
# If we find the dummy line, error and exit
grep -lE '^\s+0\s+0' /proc/self/uid_map \
&& echo "Please run under buildah unshare" \
&& exit
答案2
在当前的 buildah 版本中,buildah mount
如果不运行用户命名空间,就会崩溃。
$ buildah mount
cannot mount using driver overlay in rootless mode. You need to run it in a `buildah unshare` session
$ echo $?
125
$ buildah -v
buildah version 1.17.0-dev (image-spec 1.0.1-dev, runtime-spec 1.0.2-dev)