在Docker中启动完整容器?

30
根据这个Github问题,使用Docker 0.6或更高版本应该可以启动包含Upstart、cron等的完整容器,但我该如何操作呢?
我原本期望...
docker run -t -i ubuntu /sbin/init

这将与原来的工作方式完全相同。

lxc-start -n ubuntu /sbin/init

我希望登录页面能够正常显示,但实际上没有任何反应。我尝试使用ssh访问,但是仍然不成功。我正在使用Docker index的默认ubuntu镜像。

2个回答

24

docker run ubuntu /sbin/init 看起来在0.6.6版本中可以完美运行。你不会得到登录屏幕,因为Docker只管理进程。相反,你可以使用docker ps -notrunc获取完整的LXC容器ID,然后使用lxc-attach -n <container_id> 以root身份在该容器中运行bash。容器中未安装sshd,因此无法通过ssh连接到它。


1
我的 Docker 软件(版本 19.03.6)运行在 Ubuntu 18.04.4 主机上(并运行着一个 Ubuntu 镜像/容器),似乎对这个操作进行了反抗,最终导致了“执行冻结”。也许这是因为现代的 Docker(我们已经超过了上面提到的 6 年)不赞成这种 /sbin/init 行为?作为 Docker 新手,我只能猜测。 - Johnny Utahh
nspawn和podman更容易在容器内使用Systemd,podman使用与docker相同的命令,因此无需学习。 - Badr Elmers

1
您可以使用ubuntu-upstart镜像:
docker run -t -i ubuntu-upstart:14.04 /sbin/init
尽管这种解决方案已经过时,但如果您需要一个完整的操作系统容器,并且像正常的Ubuntu 12.04、14.04或14.10(更改:14.04位)系统一样运行,则该解决方案已足够。如果未指定版本,则默认为14.04。我没有大量使用它,并且在安装更复杂的软件包(例如dbus!)方面遇到了一些问题,但它可能适合您。
不幸的是,Ubuntu在最近的发行版中转向了systemd。谷歌搜索显示,似乎有人正在进行工作,使systemd能够在docker容器中工作,而不需要权限提升,但它似乎还没有完全准备好供生产使用。希望当16.04成为LTS时,它将准备就绪。
当然,另一个选择是使用phusion/baseimage,但它有自己启动服务的方法。似乎更适合于最小化的多进程容器。

你有这个解决方案折旧的链接吗? - brujoand
2
@brujoand,它已经被弃用,因为Ubuntu已经转向使用systemd,因此在Docker容器中使upstart工作的工作对于14.10之后的Ubuntu版本将是无用的。 - NeilenMarais
我目前的客户(写作时)使用的是14.04版本,似乎没有升级的计划,直到官方支持结束,所以对我来说它并不过时! - Asfand Qazi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接