2016 年 12 月更新。我尽量不复制 @Alien Life Form 的答案,但添加更多细节。
简短的回答:
在大多数情况下,OpenVZ 托管将使用带有与 Docker 不兼容的过时内核的 OpenVZ 6。
Docker 仅支持 OpenVZ 7(基于 3.x 内核,请参阅https://openvz.org/Docker_inside_CT_vz7)或具有内核版本042stab105.4
或更高版本的 OpenVZ 6(请参阅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
和更高版本根据官方 OpenVZ wiki 支持 Docker 所需的功能(请参阅@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。