我正在运行一个容器,ctr
使用用户命名空间将容器内的用户(根)映射到主机上的另一个用户,我想让主机网络可用于容器。为此,我正在使用该--net-host
选项。基于一个非常简单的测试容器
$ cat Dockerfile
FROM alpine
ENTRYPOINT ["/bin/sh"]
我试试
sudo ctr run -rm --uidmap "0:1000:999" --gidmap "0:1000:999" --net-host docker.io/library/test:latest test
这给了我以下错误
ctr: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"sysfs\\\" to rootfs \\\"/run/containerd/io.containerd.runtime.v2.task/default/test/rootfs\\\" at \\\"/sys\\\" caused \\\"operation not permitted\\\"\"": unknown
如果我要么一切正常
- 删除
--net-host
标志或 - 删除
--uidmap
/--gidmap
参数
我尝试将具有主机的用户添加uid=1000
到netdev
组中,但仍然出现相同的错误。我可能需要使用网络命名空间吗?
编辑:
同时发现这是内部的一个问题runc
。如果我通过将以下内容添加到config.json
"linux": {
"uidMappings": [
{
"containerID": 0,
"hostID": 1000,
"size": 999
}
],
"gidMappings": [
{
"containerID": 0,
"hostID": 1000,
"size": 999
}
],
另外不要使用网络命名空间,这意味着省略条目
{
"type": "network"
},
在该"namespaces"
部分中,我收到以下错误runc
:
$ sudo runc run test
WARN[0000] exit status 1
ERRO[0000] container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"sysfs\\\" to rootfs \\\"/vagrant/test/rootfs\\\" at \\\"/sys\\\" caused \\\"operation not permitted\\\"\""
container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"sysfs\\\" to rootfs \\\"/vagrant/test/rootfs\\\" at \\\"/sys\\\" caused \\\"operation not permitted\\\"\""