更新于2016年12月。我尝试避免重复@Alien Life Form的回答,但增加了更多细节。
简短回答:
大多数情况下,OpenVZ托管将使用不兼容Docker的过时内核的OpenVZ 6。
Docker仅支持基于3.x内核的OpenVZ 7(请参见https://openvz.org/Docker_inside_CT_vz7)或具有版本号为042stab105.4
或更高的内核的OpenVZ 6(请参见https://openvz.org/Docker_inside_CT)。
详细回答:
Docker需要Linux内核的两个功能才能运行:控制组和命名空间。因此您需要具备这些功能的内核。
使用OpenVZ时,您无法控制自己的内核,只有托管公司可以。大多数托管公司将不会合作并更新内核,因此如果内核不兼容,则通常没有办法。
OpenVZ 7基于支持Docker的3.10
内核,但我还没有看到过OpenVZ 7托管 - KVM似乎是新低成本提供商进入市场的最受欢迎的虚拟化。
OpenVZ 6在较旧的提供商中更为常见,并且基于通常与Docker不兼容的2.6
内核。但是,OpenVZ内核不是正常的2.6
内核,而是从3.x
内核中倒退了一些功能。因此,根据官方OpenVZ wiki(请参见@Alien Life Form答案),实际上内核042stab105.4
及更高版本支持Docker需要的功能。
以下文本仅适用于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。
cgroups
模块没有加载。可能没有安装?!不过docker
仍然可以在没有 cgroups 支持的情况下工作。尝试安装并启用cgroups
:sudo yum install libcgroup
和sudo service cgconfig start
。现在您应该能够访问cgroups
路径:sudo ls -l /cgroup
。重新启动 docker 服务,看看是否正常工作。 - Boynux