我正在探索 Ubuntu 12.04 中的 LXC 功能,我真的很想设置一个这样的网络:
client1: 192.168.56.101/24
lxc-host: 192.168.56.102/24
guest1 192.168.56.201/24
guest2 192.168.56.202/24
guest3 192.166.56.203/24
Run Code Online (Sandbox Code Playgroud)
我只想要一个“扁平”网络,其中来宾可以完全访问 LAN,并且可以从客户端看到。我习惯于使用 libvirt/KVM 桥接网络,如下所述:http : //libvirt.org/formatdomain.html#elementsNICSBridge
在主机上:
# /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.56.102
netmask 255.255.255.0
broadcast 192.168.56.255
bridge_ports eth1
Run Code Online (Sandbox Code Playgroud)
第一个来宾的 lxc.conf:
# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24
Run Code Online (Sandbox Code Playgroud)
看起来192.168.56.201对外界是不可见的,这不是我想要的。似乎我必须做以下事情之一:
1)在host和guest上手动设置路由
2)做些假的...提前在主机上创建虚拟接口,并配置来宾使用它们lxc.network.type=phys。我不知道这是否真的有效。
我专注于 Ubuntu,但 RHEL/Fedora 的答案也很有用....
什么是非特权容器的技术解释非常好。但是,它不适用于普通 PC 用户。是否有一个简单的答案,人们何时以及为什么应该使用非特权容器,以及它们的优点和缺点是什么?
我lxc在Arch Linux. 以下是基本系统信息:
[chb@conventiont ~]$ uname -a
Linux conventiont 3.17.4-Chb #1 SMP PREEMPT Fri Nov 28 12:39:54 UTC 2014 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
这是一个自定义/编译内核,具有user namespace enabled:
[chb@conventiont ~]$ lxc-checkconfig
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: …Run Code Online (Sandbox Code Playgroud) 使用运行 Ubuntu 12.04 和 Docker 0.8.1 的 Linode VPS 上的Docker 自动启动说明,指定的容器不会在重新启动时启动。
一旦启动,我就可以
~$ sudo start [service-name]
Run Code Online (Sandbox Code Playgroud)
一切都按计划进行,但我也希望容器在重新启动后重新启动。
教程中的脚本是否不是为处理重启而设计的?
/etc/default/docker 文件包含一行:
DOCKER_OPTS="-r=false"
Run Code Online (Sandbox Code Playgroud)
/etc/init/service-name.conf 直接来自 docker 页面:
description "service description"
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
# Wait for docker to finish starting up first.
FILE=/var/run/docker.sock
while [ ! -e $FILE ] ; do
inotifywait -t 2 -e create $(dirname $FILE)
done
/usr/bin/docker start -a db5e61a9afa8
end script
Run Code Online (Sandbox Code Playgroud) 我有两个非特权容器,我想在它们之间共享一个 unix 套接字。每个容器在主机上都有自己的用户,并具有单独的 subuid 和 subguid 映射。
我尝试在容器中创建组并将它们映射到主机上的一个组。但是,这不起作用。我不想创建额外的用户,以尽可能减少所涉及的用户数量和潜在的安全漏洞,而不会将容器相互暴露。
如何在 LXC 容器内有效地运行 X 应用程序?
ssh -Y guest
Run Code Online (Sandbox Code Playgroud)
太慢了 - 没有图形加速ssh -Y- 一切都必须使用传统的 X11 协议通过虚拟网络传输。
能够在主机和来宾应用程序之间复制粘贴是可取的,但不是必需的。运行两台 X 服务器,一台用于主机,一台用于来宾,(就我而言)是必不可少的。
我无法从来宾中运行本机 Xorg,因为它抱怨/dev/tty0丢失了,而且我无法mknod在来宾中运行该设备,因为我获得了被拒绝的权限,即使以 root 身份执行也是如此。
我试图寻找有关为什么网络接口名称会有 at 符号的信息,但到目前为止我得到的结果中有太多的噪音(我缺乏正确的搜索术语)
我在 Ubuntu 主机上有一个 LXC 容器。在容器内我运行并得到:
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:16:3e:37:a0:7a brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.0.3.195/24 brd 10.0.3.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe37:a07a/64 scope link
valid_lft …Run Code Online (Sandbox Code Playgroud) 我有一个运行 MySQL 的 Docker 容器 (LXC)。由于 Docker 背后的想法通常是“每个容器运行一个进程”,如果我定义针对 MySQL 二进制文件的 AppArmor 配置文件,它们会被强制执行吗?有没有办法让我对此进行测试?
在 FreeBSD 4.9 中,只需一个命令即可轻松完成,例如
jail [-u username] path hostname ip-number command
Run Code Online (Sandbox Code Playgroud)
如果路径是/你像往常一样运行相同的程序,但它的所有网络通信都被限制为仅使用给定的 IP 地址作为源。有时它非常方便。
现在在 Linux 中有 LXC,它看起来与 FreeBSD jail(或 Solaris 的区域)非常相似——你能想出类似的方式来执行程序吗?
我正在尝试将我的 Linux 机器设置为运行多个来宾操作系统,其中一个是 Windows VM,另一个是 Linux 容器。这里的目标是防止我弄乱主机系统,同时可以自由地操作基本操作系统并使用主机硬件。最终,除了在容器中运行我的桌面之外,我还希望运行图形加速模拟等。由于 Docker 内置了非常棒的类似 git 的容器版本控制,因此使用它似乎是一个好主意。也许 libvirt 和 LXC 一样好,但是 docker 的特权模式使得不必为容器配置设备变得更容易。
我已经做了一些研究并已经提出了一些答案,但是我无法将它们放在一起。
从 LXC 运行 X帮助我了解如何使用(即)配置容器:
lxc.cgroup.devices.allow = c 226:0 rwm
并使用
mknod -m 666 dri/card0 c 226 0
在容器内连接到主机设备。
从cuda - 使用来自 docker 容器的 GPU,我看到我可以通过 LXC 后端获得相同的设置以在 Docker 中工作。
在我看来,如果 docker 容器在特权模式下运行,那么它可以正常访问 GPU,而无需进行此额外配置。所以,我启动了一个基本系统,安装了图形驱动程序、xorg-server、xorg-xinit 和一个窗口管理器来测试它。
# startx
Cannot run from a console (or some message like that)
Run Code Online (Sandbox Code Playgroud)
好吧,我以为我在 tty2 上。
# tty
/dev/console
Run Code Online (Sandbox Code Playgroud)
那不是我所期望的。
# chvt 2 …Run Code Online (Sandbox Code Playgroud) lxc ×10
docker ×2
linux ×2
ubuntu ×2
apparmor ×1
cgroups ×1
container ×1
containers ×1
desktop ×1
freebsd ×1
ip ×1
jails ×1
libcontainer ×1
networking ×1
privileges ×1
security ×1
socket ×1
systemd ×1
upstart ×1
xorg ×1