Você não pode fazer isso com o chroot. Mas você pode fazer isso alterando o namespace do UTS , por exemplo, usando cancelar o compartilhamento .
mysystem# unshare --uts sh -c 'hostname test; uname -n'; uname -n
test
mysystem
O mesmo, interativamente:
Primeiro terminal:
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#
Segundo terminal, não afetado:
mysystem# uname -n
mysystem
mysystem#
Simplesmente saindo do shell no primeiro terminal, retorna para o que nunca mudou o namespace:
test# exit
mysystem#
Observe que somente o nome do host é alterado. Existem namespaces semelhantes para vários recursos (rede, pontos de montagem ...). Esse é o bloco fundador dos contêineres: todos eles estão em uso (o outro bloco principal para contêineres é cgroups ).