问题标签 [runc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - 内核 qdiscs 模块中的网络数据包缓冲
我想缓冲来自容器网络接口的输出数据包。这个名为 sch_plug.c https://code.woboq.org/linux/linux/net/sched/sch_plug.c.html的 netlink 库文件看起来可以解决问题,但我发现它很难使用?我应该如何调用这些函数才能使其真正起作用?如何获取传递给源代码中定义的函数的参数,如,等struct netlink_ext_ack *extack
?struct sk_buff *skb
go - “make: go: command not found” - 虽然 go 二进制文件在 $PATH
我想在 Raspbian GNU/Linux 10 (buster)、Linux 4.19.97-v7+ 上构建 runC。
我下载了 go1.15.6 ARMv6 版本,解压到/usr/local
并更新了$PATH
& $GOPATH
。
go version
返回
和echo $PATH
按照构建 runC的说明sudo make install
,运行返回
为什么它找不到 go 二进制文件?
docker - 有没有没有命名空间和 cgroup 的容器运行?
大多数容器运行时都基于命名空间和 cgroup(docker、lxc、runc)。我想知道市场上是否有不基于这些技术的开源容器?你知道一些名字吗?
linux - OCI/runc 系统路径约束如何防止重新安装此类路径?
我的问题的背景是我的Linux 内核命名空间发现 Go 包 lxkns的一组测试用例,其中我在测试容器中创建了一个新的子用户命名空间以及一个新的子 PID 命名空间。然后我需要重新挂载/proc,否则我会看到错误的进程信息并且无法查找正确的进程相关信息,例如新的子用户+PID命名空间内的测试进程的命名空间(不诉诸游击战术)。
测试工具/测试设置基本上是这样并且没有失败--privileged
(我正在简化为所有大写并关闭 seccomp 和 apparmor 以切入真正的肉):
当然,阻力最小且美观最少的路径是使用--privileged
,这将完成工作,因为这是一个一次性的测试容器(也许完全缺乏它是美丽的)。
最近,我开始意识到 Docker 的,它(afaik)在生成的 OCI/runc 容器规范中--security-opt systempaths=unconfined
转换为空的readonlyPaths 。以下 Docker 运行命令根据需要成功,它只是在示例中静默返回,因此正确执行:
如果设置失败,在不带--privilege
和不带的情况下运行时--security-opt systempaths=unconfined
,子用户内的挂载和容器内的 PID 命名空间如下所示:
- 究竟是什么机制阻止了
procfs
on的新安装/proc
? - 是什么阻止我卸载
/proc/kcore
等?
docker - 如何获取有关 libcontainer/rootfs_linux.go 中生成的错误的更多信息?
来自 github 的代码:https ://github.com/opencontainers/runc/blob/master/libcontainer/rootfs_linux.go#L59
这是为我们的兴趣调试的 if 块....
在 if 条件中,通过 newSystemErrorWithCausef 函数生成了一个错误,该函数在内部使用generic_error.go、 fmt.Sprintf 来格式化错误字符串。在我们的集成中,只有一次它遇到了这个 if 块。在获取更多细节的过程中,我想排除故障并了解为什么会发生这种情况。
到目前为止,尝试在第 55 行以及第 59 行的 if 块之前使用 fmt.Printf(........)。并且还尝试将上述语句放在prepareRootfs函数的第一行。然后在 prepareRootfs 函数的第一行尝试了 newSystemErrorWithCause(err, "some other message") 。总的来说,我没有看到我的消息生成的任何信息。
请提供任何信息以了解有关此问题的更多信息。请注意,我不是在寻找可能导致此错误的原因。我正在寻找如何从prepareRootfs的该功能中获取更多信息。
containers - 如何使用 --uidmap/gidmap 和 --net-host 选项正确运行具有 containerd 的 ctr 的容器
我正在运行一个容器,ctr
使用用户命名空间将容器内的用户(根)映射到主机上的另一个用户,我想让主机网络可用于容器。为此,我正在使用该--net-host
选项。基于一个非常简单的测试容器
我试试
这给了我以下错误
如果我要么一切正常
- 删除
--net-host
标志或 - 删除
--uidmap
/--gidmap
参数
我尝试将具有主机的用户添加uid=1000
到netdev
组中,但仍然出现相同的错误。我可能需要使用网络命名空间吗?
编辑:
同时发现这是内部的一个问题runc
。如果我通过将以下内容添加到config.json
另外不要使用网络命名空间,这意味着省略条目
在该"namespaces"
部分中,我收到以下错误runc
:
docker - 如何使用 sdk 连接到 windows 上的 containerd?
我有一些来自文档的例子:https ://containerd.io/docs/getting-started/
现在,我正在研究 windows,我也找到了一些解释,在 windows containerd 上使用类似的东西
那么如何在代码中使用它呢?
containers - RunC 和 RunQ 容器运行时有什么区别?
我正在研究RunC并遇到了RunQ,这似乎也是一种容器运行时?我想弄清楚两者之间的区别,或者它们是否结合使用?
任何有关每个人的差异/一般优点和缺点的信息将不胜感激。
谢谢!
docker - docker和runc有什么关系?
我发现一些信息说dockerd 通过 runc创建容器。但是,那些由 docker 创建的容器不能由 runc 管理。而 podman 创建的容器可以直接由 runc 管理。
供参考
码头工人:
播客:
minikube - containerd-shim的父进程是什么进程?
我用 minikube 设置了 2 个 k8s 环境。一个带--container-runtime=docker
国旗,一个带--container-runtime=containerd
国旗。这是我看到的差异。
当我设置container-runtime=docker
时,这些事情就会发生
- 有一个
dockerd
服务正在运行 - 该
dockerd
服务containerd
作为自己的孩子产生 - 有
/usr/bin/containerd-shim-runc-v2
运行实际容器的进程,每个进程的父进程都是containerd-shim-runc-v2
系统上的 PID 1。
当我设置container-runtime=containerd
时,这些事情就会发生
- 没有
dockerd
服务,没有歧义。 - 有一个
containerd
进程,它由 PID 1 拥有。同样,这并不奇怪。 - 有
containerd-shim
运行实际容器的进程,每个进程的父containerd-shim
进程是containerd
所以这是我的问题
containerd-shim
和 和有什么区别containerd-shim-runc-v2
?他们似乎大多采用相似的标志等。- 为什么在场景 1 中,垫片是 PID 1 的子代,而在场景 2 中,垫片是 containerd 的子代?
编辑:只是想到了一个编辑。在 ubuntu 20 机器上,如果我安装 docker,dockerd 是一个独立进程,其父进程为 PID 1,containerd 是一个独立进程,其父进程为 PID 1,所有容器都是 PID 为 1 的 container-shim-runc-v2 的子进程?!?!为什么containerd
不是孩子dockerd
呢?这是在哪里配置的?