용도가 있는 경우 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
한 가지 방법은 루트 사용자가 사용자에 매핑되었는지 확인하는 것입니다. 기본 사용자 이름 공간에서 실행 하면 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)