在OpenVZ VPS上安装Docker

在OpenVZ VPS上安装Docker,docker,centos,openvz,Docker,Centos,Openvz,我有一个OpenVZ VPS,操作系统是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/cgconfi

我有一个OpenVZ VPS,操作系统是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内核,请参阅)或内核版本为
042stab105.4
或更高版本的OpenVZ 6(请参阅)

长答案

Docker需要Linux内核的两个特性才能运行:控制组和名称空间。因此,您需要一个具有这些特性的内核

使用OpenVZ,您不需要控制内核,只有托管公司可以控制。大多数托管公司都不会协作并更新内核,因此如果内核不兼容,那么通常情况下你就没有运气了

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

OpenVZ 6在较老的提供商中更为常见,它基于与Docker不兼容的
2.6
内核。然而,OpenVZ内核不是普通的
2.6
内核,而是从
3.x
内核向后移植的特性很少。因此,事实上内核
042stab105.4
和更高版本支持Docker根据官方OpenVZ wiki所需的功能(参见@Alien Life Form answer)

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

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

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


另一个显而易见但并不总是适用的解决方案是使用另一种虚拟化技术(如Xen或KVM)从OpenVZ转移到主机。然而,可能是主线CentOS 6内核没有必要的功能,因此CentOS 6只能在使用非库存补丁内核运行时与Docker兼容。因此,您也可以考虑移动到CCENTOS 7。

旧线程-但是,可以通过将CENTS6处理为在这个链接中的Debian喘息来找到解决方案:

基本上,在/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

}

似乎未加载
cgroup
模块。可能没有安装?!但是,
docker
在没有cgroup支持的情况下仍然可以工作。尝试安装并启用
cgroups':
sudo-yum-install-libcgroups`和
sudo-service-cgcconfig-start
。现在您应该能够访问
cgroup
路径:
sudols-l/cgroup
。重新启动docker服务,看看它是否工作。显然docker 1.10是使用2.6.32内核的最后一个版本。后续docker版本会出现如下错误:运行docker不支持Linux内核版本2.6.32-042stab123.2。请将您的内核升级到3.10.0或更新版本。感谢您提供详细答案!我的/etc/init.d/docker没有一个prestart()函数。我想我可以在任何地方添加这个函数,但是什么时候调用它,从哪里调用它?