Namespace

如何測試 buildah 腳本是否在 buildah-unshare 下執行?

  • November 16, 2020

如果我有一個使用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

一種方法是確保將 root 使用者映射到某物。如果您cat /proc/self/uid_map在主使用者名空間上執行,您會看到 uid=0 映射到 0 的長度為 all users 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

引用自:https://unix.stackexchange.com/questions/619664