为什么 docker 没有以 lxc 形式执行 init

为什么 docker 没有以 lxc 形式执行 init

Docker 没有运行 init。因此服务不会在启动期间启动。Lxc 在 lxc-start 期间运行 init。既然 Docker 使用 lxc,为什么它不运行 init。不运行 init 并依赖 Supervisord 进行守护进程有什么好处?

答案1

Docker 是一个应用程序容器,更专注于将应用程序作为容器分发。在此应用程序中运行里面容器是唯一运行的,即它们的 init 进程。如果您的进程需要更多应用程序(mysql、mongodb 数据库等),您不会在由一个 init 守护进程管理的 docker 容器内启动这些应用程序,而是启动更多 docker 容器,每个容器都在 docker 容器内。

你可以试试http://phusion.github.io/baseimage-docker/它提供了一个简单的 init 守护进程来在你的 docker 镜像中运行更多进程(这个是基于 Ubuntu 的),或者你可以尝试 LXDhttp://www.ubuntu.com/cloud/lxd对于容器技术来说,它更像是系统容器

答案2

这个问题被提出来是为了问题在 GitHub 上,并合并拉取请求以允许init自 0.6.x 开始运行):

docker run $IMAGE /sbin/init

来源

init 没有运行的原始原因(由于0.6.x):

当启动一个新容器时,docker mint 将自身限制为容器内部的 /sbin/init,隐藏真正的 /sbin/init 并在进程中使其无法执行。

这个答案可能会提供更多帮助,并且Docker 指南可能会有用。

相关内容