mydocker
mydocker copied to clipboard
User Namespace 报错
fork/exec /usr/bin/sh: no such file or directory
环境
Linux vm_16_14_centos 3.10.0-862.3.2.el7.x86_64 #1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
已经参考相关资料:
UidMappings: []syscall.SysProcIDMap{
{
ContainerID: uid,
HostID: 0,
Size: 1,
},
},
GidMappings: []syscall.SysProcIDMap{
{
ContainerID: gid,
HostID: 0,
Size: 1,
},
},
环境 Linux zhang 5.0.0-29-generic #31~18.04.1-Ubuntu SMP Thu Sep 12 18:29:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
错误 2019/09/25 11:11:38 fork/exec /bin/sh: no such file or directory 请问如何解决?
同问
Linux 4.14.81.bm.15-amd64 #1 SMP Debian 4.14.81.bm.15 Sun Sep 8 05:02:31 UTC 2019 x86_64 GNU/Linux
书中示例已经失效 换成
UidMappings: []syscall.SysProcIDMap{ { ContainerID: uid, HostID: 0, Size: 1, }, }, GidMappings: []syscall.SysProcIDMap{ { ContainerID: gid, HostID: 0, Size: 1, }, },
后报错fork/exec /bin/sh: no such file or directory
我是在Ubuntu 20.04环境:
root@jasonkayPC:/home/jasonkay/workspace/my_docker# uname -a
Linux jasonkayPC 5.4.0-58-generic #64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
下面的代码是没问题的:
package main
import (
"log"
"os"
"os/exec"
"syscall"
)
func main() {
cmd := exec.Command("sh")
cmd.SysProcAttr = &syscall.SysProcAttr{
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC |
syscall.CLONE_NEWPID | syscall.CLONE_NEWNS | syscall.CLONE_NEWUSER,
/*
以下两种情况,会导致UidMappings/GidMappings中设置了非当前进程所属UID和GID的相关数值:
1. HostID非本进程所有(与Getuid()和Getgid()不等)
2. Size大于1 (则肯定包含非当前进程的UID和GID)
则需要Host机使用Root权限才能正常执行此段代码。
Issue #3 error about User Namespace:
https://github.com/xianlubird/mydocker/issues/3
*/
UidMappings: []syscall.SysProcIDMap{
{
ContainerID: 1,
HostID: syscall.Getuid(),
Size: 1,
},
},
GidMappings: []syscall.SysProcIDMap{
{
ContainerID: 1,
HostID: syscall.Getgid(),
Size: 1,
},
},
}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
os.Exit(-1)
}
root@container:/home/ubuntu/projects/go_learning/go_namespace2# uname -a Linux container 4.15.0-142-generic #146-Ubuntu SMP Tue Apr 13 01:11:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
同样的错误: root@container:/home/ubuntu/projects/go_learning/go_namespace2# go run main3.go 2022/09/20 00:02:18 fork/exec /bin/sh: no such file or directory exit status 1