방금 chroot 감옥이 무엇인지 배웠으므로 이 질문이 별로 이해가 되지 않는다면 양해해 주시기 바랍니다.
기본적으로 내 컴퓨터에서 로컬로 실행되는 두 개의 프로세스가 있고 "uname -n"의 결과가 각 프로세스(및 모든 하위 프로세스)마다 다르기를 원합니다. 이 작업을 수행하기 위해 chroot 감옥을 어떻게 사용할 수 있습니까?
답변1
chroot로는 이 작업을 수행할 수 없습니다. 하지만 변경하면 그렇게 할 수 있습니다.UTS 네임스페이스, 예를 들어 다음을 사용하여공유 취소.
mysystem# unshare --uts sh -c 'hostname test; uname -n'; uname -n
test
mysystem
마찬가지로, 대화식으로:
첫 번째 터미널:
mysystem# unshare --uts bash
mysystem# hostname test
mysystem# exec bash # to refresh prompt
test# uname -n
test
test# strace uname -n 2>&1|tail
brk(NULL) = 0x5592a93f6000
brk(0x5592a9417000) = 0x5592a9417000
uname({sysname="Linux", nodename="test", ...}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
write(1, "test\n", 5test
) = 5
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
test#
두 번째 터미널, 영향을 받지 않음:
mysystem# uname -n
mysystem
mysystem#
첫 번째 터미널에서 셸을 종료하고 네임스페이스가 변경되지 않은 호출 터미널로 돌아갑니다.
test# exit
mysystem#
알아채다오직호스트 이름이 변경됩니다. 유사한 것이 있다네임스페이스다양한 기능(네트워크, 장착 지점...)에 사용됩니다. 이것이 컨테이너의 초석입니다. 모든 컨테이너가 사용됩니다(컨테이너의 또 다른 주요 초석은 다음과 같습니다).cgroup).