我在网上做了一些研究,但我并没有找到任何关于如何在两个或更多的色度监狱之间建立交流联系的信息。“标准”似乎只是使用一个单一的色度监狱进行沙箱。
为了将事情放到上下文中,我尝试执行码头容器的基本功能,但使用chroot监狱。因此,同样的方式,两个码头集装箱可以通过IP和/或连接到同一个用户定义的码头网络,这是否存在于两个色度监狱?
--我明白容器和彩色监狱是不同的东西,我对两者都很熟悉。我只需要知道是否有类似于连接两个容器的方式连接两个色度监狱,或者这是不存在的,我只是在浪费时间
发布于 2018-06-18 19:26:25
Docker没有什么神奇之处:它只是使用Linux内核提供的工具来启用各种隔离。您可以利用相同的功能。
码头“网络”只不过是你的主机上的一个桥接设备。您可以使用brctl或ip link命令创建这些操作,如下所示:
ip link add mynetwork type bridge您需要激活接口并分配一个ip地址:
ip addr add 192.168.23.1/24 dev mynetwork
ip link set mynetwork upDocker容器具有与主机不同的网络环境。这称为网络命名空间,您可以使用ip netns命令手动操作它们。
可以使用ip netns add命令创建网络命名空间。例如,这里我们创建了两个名称空间,名为chroot1和chroot2
ip netns add chroot1
ip netns add chroot2接下来,您将创建两对veth网络接口。每对的一端将连接到上述网络名称空间之一,另一端将连接到mynetwork桥上:
# create a veth-pair named chroot1-inside and chroot1-outside
ip link add chroot1-inside type veth peer name chroot1-outside
ip link set master mynetwork dev chroot1-outside
ip link set chroot1-outside up
ip link set netns chroot1 chroot1-inside
# do the same for chroot2
ip link add chroot2-inside type veth peer name chroot2-outside
ip link set netns chroot2 chroot2-inside
ip link set chroot2-outside up
ip link set master mynetwork dev chroot2-outside现在,在网络命名空间中配置接口。我们可以使用-n选项对ip命令执行此操作,这将导致命令在指定的网络命名空间中运行:
ip -n chroot1 addr add 192.168.23.11/24 dev chroot1-inside
ip -n chroot1 link set chroot1-inside up
ip -n chroot2 addr add 192.168.23.12/24 dev chroot2-inside
ip -n chroot2 link set chroot2-inside up请注意,在上面,ip -n <namespace>只是一个快捷方式:
ip netns exec <namespace> ip ...因此:
ip -n chroot1 link set chroot1-inside up相当于:
ip netns exec chroot1 ip link set chroot1-inside up(显然,较早版本的iproute包不包括-n选项。)
最后,您可以在这两个名称空间中启动chroot环境。假设您的chroot文件系统安装在/mnt上,在一个终端中运行:
ip netns exec chroot1 chroot /mnt bash在另一个航站楼:
ip netns exec chroot2 chroot /mnt bash你会发现这两个色色环境可以相互作用。例如,在chroot1环境中:
# ip addr show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
36: chroot1-inside@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 12:1c:9c:39:22:fa brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.23.11/24 scope global chroot1-inside
valid_lft forever preferred_lft forever
inet6 fe80::101c:9cff:fe39:22fa/64 scope link
valid_lft forever preferred_lft forever
# ping -c1 192.168.23.12
PING 192.168.23.12 (192.168.23.12) 56(84) bytes of data.
From 192.168.23.1 icmp_seq=1 Destination Host Prohibited
--- 192.168.23.12 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms他们可以为主人打针:
# ping -c1 192.168.23.1
PING 192.168.23.1 (192.168.23.1) 56(84) bytes of data.
64 bytes from 192.168.23.1: icmp_seq=1 ttl=64 time=0.115 ms
--- 192.168.23.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.115/0.115/0.115/0.000 ms 当然,为了使这个chroot环境有用,还缺少一些东西,比如/proc、/sys和/dev上的虚拟文件系统。设置所有这些并将其清晰地重新分解,这就是为什么人们使用诸如Docker或系统d-n产卵之类的工具,因为有很多东西需要手工管理。
https://stackoverflow.com/questions/50915608
复制相似问题