在 OpenVZ VPS 上安装 Docker

Install Docker on OpenVZ VPS

我有一个OpenVZVPS,操作系统是CentOS 6,我尝试安装Docker,但是Docker启动错误

Starting cgconfig service: Error: cannot mount cpuset to /cgroup/cpuset: Invalid argument
/sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup mounting failed
Failed to parse /etc/cgconfig.conf or /etc/cgconfig.d      [FAILED]
Starting docker:                                           [  OK  ]

2016 年 12 月更新。我尽量不重复@Alien Life Form 的回答,而是添加了更多细节。

简答:

在大多数情况下,OpenVZ 托管将使用 OpenVZ 6,其内核已过时,与 Docker 不兼容。

Docker 仅支持 OpenVZ 7(基于 3.x 内核,参见 https://openvz.org/Docker_inside_CT_vz7 ) or with OpenVZ 6 with kernel version 042stab105.4 or newer (see https://openvz.org/Docker_inside_CT)。

长答案:

Docker 需要 Linux 内核的两个功能才能运行:控制组和命名空间。所以你需要一个具有这些特性的内核。

使用 OpenVZ,您无法控制内核,只有托管公司可以。大多数托管公司不会合作更新内核,因此如果内核变得不兼容,您通常就不走运了。

OpenVZ 7 基于 3.10 内核,支持 Docker 开箱即用,但是我还没有看到 OpenVZ 7 托管 - KVM 似乎是最受欢迎的虚拟化,新低成本供应商进入市场。

OpenVZ 6 在较旧的供应商中更为常见,并且基于 2.6 内核,通常与 Docker 不兼容。然而,OpenVZ 内核不是普通的 2.6 内核,但几乎没有从 3.x 内核向后移植的功能。所以实际上内核 042stab105.4 和后来支持功能 Docker 根据官方 OpenVZ wiki 需要(参见@Alien Life Form 回答)。

以下文字仅适用于 OpenVZ 版本 6。

如果 uname -a 显示内核 042stab105.4 或更高版本 - 您可以使用 Docker 并进行一些调整以安装所需的特殊文件系统。

如果它比较旧并且公司愿意合作,他们不能安装主线内核,因为它与 OpenVZ 不兼容。他们必须从 https://openvz.org/Download/kernel 安装带有 OpenVZ 补丁的特殊内核。最好是最新的稳定版本(在撰写本文时为 042stab120.11),但至少为 042stab105.4。相比之下,我见过的所有 OpenVZ 主机都有类似 2.6.32-042stab075.2 的东西,它不仅与 Docker 不兼容,而且容易受到攻击。所以你可以尝试使用漏洞参数来强制支持升级:)

另一个明显但并不总是适用的解决方案是从 OpenVZ 转移到使用其他虚拟化技术(例如 Xen 或 KVM)的主机。但是,可能是主线 CentOS 6 内核不具备必要的功能,因此 CentOS 6 只能兼容 Docker 而 运行 非库存补丁内核。所以你也可以考虑迁移到 CentOS 7。

旧线程 - 然而,解决方案可以通过将 CentOS6 视为 debian 喘息来找到link:https://openvz.org/Docker_inside_CT

基本上,在 /etc/init.d/docker 中执行:

prestart() {
# ALF   service cgconfig status > /dev/null
# ALF
# ALF    if [[ $? != 0 ]]; then
# ALF        service cgconfig start
# ALF    fi
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

}