OpenVZ VPS 上的 LXC 容器

OpenVZ VPS 上的 LXC 容器

我正在尝试在 OpenVZ 中托管的 VPN 上运行 LXC,我曾尝试使用多种图像风格,ubuntu、centos、debian……但都没有成功。LXC 安装正确,但由于网络原因,容器无法启动,这似乎与接口桥接有关!

有人遇到过类似的问题吗?有人知道这是 OpenVZ 的限制吗?

从全新安装的 ubuntu 14.04 开始:

sudo apt-get update 
sudo apt-get install lxc
sudo lxc-create -n p1 -t ubuntu 
sudo lxc-start -n p1 --logfile log.txt
cat log.txt
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:instantiate_veth:2949 - failed to create veth pair (vethP4LPC8 and vethO6MP73): Operation not supported
    lxc-start 1434379565.265 ERROR    lxc_conf - conf.c:lxc_create_network:3261 - failed to create netdev
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:lxc_spawn:826 - failed to create the network
    lxc-start 1434379565.265 ERROR    lxc_start - start.c:__lxc_start:1080 - failed to spawn 'p1'
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:342 - The container failed to start.
    lxc-start 1434379565.265 ERROR    lxc_start_ui - lxc_start.c:main:346 - Additional information can be obtained by setting the --logfile and --logpriority options.

并尝试:

sudo brctl addbr lxcbr0
  add bridge failed: Invalid argument

答案1

OpenVZ 是一种操作系统虚拟化技术,与 LXC 和 Docker 类似,但基于各种内核补丁,并且许多从未与主流内核集成。

OpenVZ 基于旧内核 (2.6.x),现在没有管理容器所需的很多东西(主要是 cgroups)。不幸的是,您无法在 OpenVZ 虚拟环境中运行 LXC 容器。

答案2

不要贬低其他答案(因为他们正确地指出了 OpenVZ 容器是容器),但请参阅这个有趣的链接: OVZ CT 中的 Docker(“自 OpenVZ 内核 042stab105.4 以来,可以在容器内运行 Docker。本文介绍了如何操作。”)

它可能会也可能不会为你的问题提供一些解决方案,但理论上可以在 CT 中使用 cgroups(在比042stab105.4并使用一个相当新的控制寄存器)。基本上你需要:

  • 检查您的内核配置:尝试lxc-checkconfig在给定的内核下,或使用CONFIG=/boot/config-2.6.32-openvz-042stab108.2-amd64 lxc-checkconfig任何已安装的内核。

如果看起来没问题,您可以继续,并且:

vzctl set $veid --save --features bridge:on --netif_add eth0 --netfilter full --devnodes net/tun:rw

并在 CT 中挂载自定义 cgroup:

mount -t tmpfs tmpfs /sys/fs/cgroup
mkdir /sys/fs/cgroup/freezer,devices
mount -t cgroup cgroup /sys/fs/cgroup/freezer,devices -o freezer,devices
mkdir /sys/fs/cgroup/cpu,cpuacct,cpuset
mount -t cgroup cgroup /sys/fs/cgroup/cpu,cpuacct,cpuset/ -o cpu,cpuacct,cpuset

这确实是一个有趣的构造,但 ovz 控制和 cgroups 本质上并不不兼容(许多 cgroup 功能都是空的存根函数,例如,不执行任何操作但不会发出错误消息)。

免责声明:我还没有尝试过(我的内核缺少 cgroup 命名空间)。

另一个有用的链接是此 Docker 问题跟踪器评论关于如何使用所需的特性来编译你的OVZ内核。

相关内容