问题标签 [linux-namespaces]

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.

0 投票
1 回答
825 浏览

linux - 如何将名称添加到命名空间?

据我所知,我可以使用“克隆”来创建进程和命名空间,但是以这种方式创建的命名空间没有名称。比如我创建了一个参数为:CLONE_NEWNS 的网络命名空间,但是在命令“ip netns list”中,没有命名空间列表,因为创建的命名空间没有名字。但是我可以使用命令“ip netns add xxx”来创建一个名称为“xxx”的命名空间。

我想知道如何使用系统调用“克隆”创建一个名称空间。

0 投票
2 回答
964 浏览

linux - 如何获取 LXC 容器的 IP 地址?

我已经使用 lxc-start 启动了 lxc。现在,如何获取容器的 IP 地址?

0 投票
0 回答
2402 浏览

linux - 单个应用程序的多个 Linux 网络命名空间

我正在尝试使用网络命名空间来实现 VRF 行为(虚拟路由和转发)以进行网络隔离。本质上,我有一个服务器应用程序 (C/C++) 在默认命名空间的 TCP 端口上运行。我想做的是使用网络命名空间来创建使用 VLAN 的隔离 VRF,然后让在默认命名空间中运行的应用程序能够为每个命名空间生成一个线程,以便在每个命名空间的同一端口上侦听。

我已经弄清楚了网络端,我只是看不到如何生成线程(如果可能,更喜欢使用 pthread 而不是 clone()),在其中一个命名空间上调用 setns(),然后绑定到同一个命名空间内的端口。下面是我为创建命名空间和桥接器所做的工作(为简单起见,此处限制为一个命名空间):

有了这个,我可以在对等机器上创建一个 VLAN(没有容器)并 ping 10.10.10.1 没有问题。所以我知道链接很好。然后我想要做的是让我现有的应用程序能够在 C 或 C++ 中生成一个线程(pthreads 是首选),并且该线程调用 setns() 并将其放入命名空间 ns_vlan100,因此我可以绑定到我的应用程序的相同端口,就在那个命名空间内。

我似乎无法弄清楚如何做到这一点。任何帮助深表感谢。

0 投票
1 回答
543 浏览

linux-kernel - 访问 /proc//ns/pid -> inode 编号

我正在尝试访问可以使用ls -Li /proc/<pid>/ns/mntor看到的 pid 命名空间的 inode 编号/proc/<pid>/ns/pid

我是内核代码的新手,想知道内核,从current任务结构我怎样才能得到这个值?一些代码真的会有所帮助。

0 投票
3 回答
27673 浏览

linux - docker 网络命名空间在 ip netns 列表中不可见

当我创建一个新的 docker 容器时

并检查它的命名空间,我可以看到已经创建了新的命名空间(例如 pid 7047)。

当我检查时, ip netns list我看不到新的网络命名空间。

知道为什么吗?

0 投票
1 回答
358 浏览

c - 取消共享后grantpt报告错误

我有一个小程序,它试图在取消共享后创建一个伪终端。输出是:

编码:

如果我删除flag |= CLONE_NEWUSER;,则不会报告错误。你能帮忙解释一下为什么会这样吗?提前致谢!

0 投票
0 回答
163 浏览

linux - 如何使用 linux 的网络命名空间功能来测量进程通过网络发送/接收的字节数?

我有这种情况,我需要测量在执行过程中发送/接收的字节数。PC 将有一个普通的以太网接口 (eth1) 以与网络中的其他人进行交互。我对 linux 网络命名空间和 cgroups 做了一些研究,鉴于此,我采取了这种方法来做措施。

  • 创建一个新的网络命名空间。
  • 创建一对虚拟以太网接口 veth0 和 veth1。
  • 将 veth1 分配给先前创建的命名空间,将 veth0 保留在默认命名空间上。
  • 配置虚拟接口并在 veth0 和 eth1 之间创建一个网桥。

鉴于此,我将在新命名空间上执行我的进程,并将 veth1 中的值假定为进程发送/接收的字节数。我知道我可以在上述步骤中使用 iproute2 和 bridge-utils,但它正确吗?还是有另一种方法来做这种措施?

0 投票
1 回答
5878 浏览

linux - 如何在 Linux 中列出所有命名空间中的所有网络链接

据我所知,在 Linux shell 环境中,我可以使用 列出任何特定命名空间中的网络链接ip,例如:

ip netns exec <namespace> ip link show

我的问题是:

如果我有多个网络命名空间,如何用一个简单的命令列出所有命名空间中的所有链接?或者我必须编写一个脚本才能这样做?

0 投票
1 回答
1654 浏览

linux-kernel - Linux/include/linux/pid.h 中定义的“struct pid”任务成员的目的是什么?

我试图更好地理解内核如何实现 pid namespace 。正在使用的基本结构之一是struct pid

现在,据我了解,数字数组会跟踪不同 pid 命名空间中的进程不同的 pid。

我不明白的是tasks会员的目的。它在这里说:(LWN)

.." 该结构包含 ID 值,具有此 ID 的任务列表.."

所以我从中了解到,相同的pid在几个 proccess/tasks 之间共享。现在,不同的进程/线程可以共享相同的 tpid/gpid 但不能共享相同的 pid!那么为什么会有具有相同 PID 的任务列表呢?我错过了什么?

谢谢

0 投票
1 回答
72 浏览

linux - 为什么 CLONE_NEWNS 不能使挂载命名空间隔离?

命名空间链接

并做以下测试:

  1. gcc -o mntns mntns.c
  2. 使用 $ sudo ./mntns 运行
  3. secret_dir='mktemp -d --tmpdir=/tmp'
  4. mount -n -o size=1m -t tmpfs tmpfs $secret_dir
  5. df -h ,显示它包含在步骤 3 中创建的 tmpdir,/tmp/tmp.sFsCzTDhjE
  6. 打开另一个shell控制台,运行df -h,它还包括/tmp/tmp.sFsCzTDhjE

所以看起来 CLONE_NEWNS 不能使挂载隔离,仍然可以在其他挂载命名空间中看到。有人可以帮助这个问题吗?搜索了很多例子,他们只是尝试了这个,但没有谈到这个问题。