标签: runc

容器与runC的比较

这两者如何比较?据我所知,runC是容器的运行时环境.这意味着该组件提供了运行容器所必需的环境.那时容器的作用是什么?如果它完成其余的工作(网络,卷管理等),那么Doc​​ker Engine的作用是什么?那容器式垫片怎么样?基本上,我试图了解每个组件的作用.

runc docker

40
推荐指数
3
解决办法
1万
查看次数

libcontainer vs Docker vs OCF vs runc?

我试图更好地理解Docker世界,并且似乎无法将我的大脑包围在这些之间的差异.我相信 OCF是一个由OpenContainers认可的新兴容器标准,我相信 Docker将成为该标准的第一个参考实现.但即便如此,我也担心Google Gods似乎没有提供以下答案:

  • OCF的"标准" 究竟是什么?只是一份书面文件?一个书面的API?一个编译过的C lib?
  • 本标准规定的具体项目有哪些例子?我想如果没有真正理解什么是" 容器 ",我很难理解容器的管理标准甚至是什么.
  • runc和libcontainer如何/在哪里适合Docker/OCF等式?

runc docker linux-containers

13
推荐指数
2
解决办法
4785
查看次数

OCI 运行时执行失败:执行失败:无法启动容器进程:打开/dev/pts/0:不允许操作:未知

我读过许多与我的问题类似的链接,但它们都没有帮助我解决问题。

类似链接

  1. 由于执行“systemctl daemon-reload”后权限问题,无法执行到容器中
  2. OCI 运行时执行失败:执行失败:无法启动容器进程:打开/dev/pts/0:不允许操作:未知
  3. CI运行时执行失败:执行失败:无法启动容器进程:打开/dev/pts/0:不允许操作:未知
  4. OCI 运行时执行失败:执行失败:无法启动容器进程:打开/dev/pts/0:不允许操作:未知
  5. docker exec 执行失败
  6. OCI运行时执行失败:执行失败:container_linux.go:348:启动容器进程导致“打开/ proc / self / fd:没有这样的文件或目录”:未知

问题描述

我已经使用创建了一个新的 Kubernetes 集群Kubespray。当我想在其中一个容器中执行一些命令时,我遇到了以下错误:

执行的命令
kubectl exec -it -n rook-ceph rook-ceph-tools-68d847b88d-7kw2v -- sh
Run Code Online (Sandbox Code Playgroud)
错误:

OCI 运行时执行失败:执行失败:无法启动容器进程:打开 /dev/pts/1:不允许操作:未知命令以退出代码 126 终止

我也登录了运行pod的节点,并尝试使用docker exec命令执行容器,但错误没有改变。

解决方法

  • 据我发现,错误代码(126)意味着权限不足,但我sh在 Docker 或 Kubernetes 中没有遇到过这种错误(例如执行)。

  • 我还检查了是否SELinux启用(正如第三个链接中所述)。

    apt install policycoreutils
    sestatus
    # Output
    SELinux status:                 disabled
    
    Run Code Online (Sandbox Code Playgroud)
  • 在第5个链接中,据说检查你是否更新了内核,而我没有升级节点上的任何内容。

    id; stat /dev/pts/0
    # output
    uid=0(root) gid=0(root) groups=0(root)
      File: /dev/pts/0
      Size: 0               Blocks: …
    Run Code Online (Sandbox Code Playgroud)

runc docker kubernetes containerd kubernetes-rook

11
推荐指数
1
解决办法
3万
查看次数

Runc PGP 签名问题

在Archlinux上安装docker时,出现以下错误:

error: runc: signature from "Frederik Schwan <frederik.schwan@linux.com>" is unknown trust
:: File /var/cache/pacman/pkg/runc-1.0.3-1-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题,因为它阻止我安装 docker 吗?

archlinux runc docker

9
推荐指数
2
解决办法
9765
查看次数

containerd-shim的父进程是什么进程?

我使用 minikube 设置了 2 个 k8s 环境。一张带--container-runtime=docker旗帜,一张带--container-runtime=containerd旗帜。这是我看到的差异。

当我设定时container-runtime=docker,这些事情就会发生

  1. 有一个dockerd服务正在运行
  2. 该服务作为其自己的子项dockerd生成containerd
  3. 有些/usr/bin/containerd-shim-runc-v2进程运行实际的容器,每个进程的父进程containerd-shim-runc-v2在系统上都是 PID 1。

当我设定时container-runtime=containerd,这些事情就会发生

  1. 那里没有dockerd服务,没有任何含糊之处。
  2. 有一个containerd进程,其所有者为 PID 1。同样,这并不奇怪。
  3. 有些containerd-shim进程运行实际的容器,每个containerd-shim进程的父进程是containerd

这是我的问题

  1. containerd-shim和之间有什么区别containerd-shim-runc-v2?他们似乎大多采用相似的旗帜等。
  2. 为什么在场景 1 中,垫片是 PID 1 的子级,而场景 2 中的垫片是 containerd 的子级

编辑:刚刚想到编辑。在ubuntu 20机器上,如果我安装docker,dockerd是一个单独的进程,其父进程是PID 1,containerd是一个单独的进程,其父进程是PID 1,所有容器都是container-shim-runc-v2的子进程,其PID为1 ?!?!为什么不是containerd孩子dockerd?这是在哪里配置的?

runc minikube containerd docker-daemon

8
推荐指数
1
解决办法
2万
查看次数

以非 root 用户身份构建/安装 podman

从我读到的内容来看,它似乎是困扰 docker 的一切问题的答案。用户目录中的图像、只有用户权限的容器、没有守护进程等。 然而,每个安装指南似乎都依赖于系统的包管理器,而构建似乎依赖于正在安装的包(runc、common),这也需要系统包管理器的权限。

那么如何让 podman 在我只有普通用户访问权限的系统上运行呢?

containers runc podman

6
推荐指数
1
解决办法
326
查看次数

为什么Docker构建需要使用/dev/shm?

我注意到该命令docker build有一个参数--shm-size bytes用于设置 /dev/shm 的大小。但我不知道为什么docker build需要使用共享内存。

docker build命令仅遵循 Dockerfile 并运行一组中间容器来构建目标容器环境并将其作为映像提交。在这个过程中,Dockerfile中的所有参数和命令都被解析并打包为一个struct,传入不同的组件(docker client、docker daemon、containerd、runc ...)。似乎docker build不需要共享内存来传递信息。

但为什么docker build要提供这个参数--shm-size bytes呢?也许我对这个过程有一些误解。请纠正我。谢谢!

linux containers runc docker dockerfile

6
推荐指数
1
解决办法
1272
查看次数

寻找有关containerd-shim/runc子进程的解释

我们在 swarm 环境中使用 docker。一切都很好......但是对于几天前出现的一个名为“exe”的奇怪进程:

14126 root      20   0  446836  33648    184 R  49.0  0.2   0:05.98 exe
    1 root      20   0   52356    532    332 S  34.3  0.0   2750:22 systemd
13789 root      20   0 5424660  49784      0 S   5.6  0.3   2381:57 dockerd
Run Code Online (Sandbox Code Playgroud)

它确实占用了 100% 的 CPU。
我们试图了解它来自哪里,但它非常不稳定,它的 pid 每 3-4 秒就会改变一次。你可以猜想,这样的行为引发了一些警报。
最终,我们设置了一些监控工具(使用auditd)来拍摄它的快照,并看到:

Syscall event   curl    /usr/bin/curl   24242   24234
Syscall event   4       /               24240   24234
Syscall event   exe     /usr/bin/runc   24240   24234
Syscall event   runc    /usr/bin/runc   24234   10444
Run Code Online (Sandbox Code Playgroud)

“main”runc 的父进程是:

root 10444 2621 0 …
Run Code Online (Sandbox Code Playgroud)

ps runc docker docker-swarm containerd

5
推荐指数
0
解决办法
2619
查看次数

runc 和 ctr 命令不显示 docker 图像和容器

我有多个 Docker 映像和容器在 VM 上运行。但是像“runc list”这样的命令没有列出任何这些。

如何让 runc/containerd 知道我现有的 docker 镜像?

runc docker containerd

4
推荐指数
1
解决办法
1841
查看次数

Windows docker 上的 Linux docker Runc 的等效部分是什么?

请原谅我刚刚开始学习理解Docker。据我所知,Docker曾经依赖过LXC。然后转到libcontainer.Now it is Runc(from docker 1.11). 这是(开放容器格式)的实现OCF。而且我知道Runc只能在Linux上运行。RuncLinux docker 的底层也是如此。Runc我的问题是Windows docker 上的Linux docker 相当于什么?谢谢。

runc docker

3
推荐指数
1
解决办法
959
查看次数

OCF规范是否意味着Docker不再以Linux为中心?

当我第一次听说微软正在努力运行docker容器时,它没有任何意义.

有一段时间,似乎Docker 以Linux为中心,依赖于Linux容器.

现在看来Docker 已经从LXC 切换runc中的Open Containers Format(OCF)规范的实现.

我的问题是:OCF规范是否意味着Docker不再以Linux为中心?(也就是说它是如何工作的?这是否意味着在OSX上也存在理论上的能力?)

linux windows lxc runc docker

2
推荐指数
1
解决办法
114
查看次数

如何使用 runc 列出 docker 容器

据我所知,runc list允许传递容器存储的根目录。但是我不知道要为 docker 传递什么根目录。我试过了,/var/lib/docker/containers但它说容器不存在。我确实有容器出现在docker ps(仅供参考)中。

或者我假设 docker 仍然使用 runc 来运行容器是错误的吗?

编辑:基于 Niklas 的回答。有没有办法找到 runc 的根目录 - 从 docker 或扫描文件系统?

runc docker

2
推荐指数
1
解决办法
1058
查看次数

"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 返回

go version go1.15.6 linux/arm
Run Code Online (Sandbox Code Playgroud)

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/usr/local/go/bin
Run Code Online (Sandbox Code Playgroud)

按照构建 runC的说明,运行sudo make install返回

make: go: command not found
install -D -m0755 runc /usr/local/sbin/runc
Run Code Online (Sandbox Code Playgroud)

为什么找不到 go 二进制文件?

makefile go runc raspberry-pi

1
推荐指数
1
解决办法
724
查看次数