【问题标题】:Start full container in Docker?在 Docker 中启动完整容器?
【发布时间】:2013-10-20 09:23:04
【问题描述】:

根据this github issue,应该可以使用 Upstart、cron 等使用 Docker 0.6 或更高版本启动一个完整的容器,但我该怎么做?

我早就料到了

docker run -t -i ubuntu /sbin/init

会像

一样工作
lxc-start -n ubuntu /sbin/init

我会得到一个登录屏幕,但它什么也没显示。我也尝试使用 ssh 访问它,但没有运气。我正在使用来自 Docker 索引的默认 ubuntu 映像。

【问题讨论】:

    标签: docker lxc linux-containers


    【解决方案1】:

    docker run ubuntu /sbin/init 似乎在 0.6.6 中对我来说完美无缺。您不会看到登录屏幕,因为 Docker 只管理该过程。相反,您可以使用 docker ps -notrunc 获取完整的 lxc 容器 ID,然后使用 lxc-attach -n <container_id> 在该容器中以 root 身份运行 bash。 sshd 没有安装在容器中,所以你不能 ssh 到它。

    【讨论】:

    • 我的 Docker(版本 19.03.6)软件在 Ubuntu 18.04.4 主机(并运行 Ubuntu 映像/容器)上运行似乎反对这种策略,以 Freezing execution. 结尾。也许这是由于现代 Docker(我们比上述帖子晚了 6 年多)对这种 /sbin/init 行为不满意?作为一个 Docker 新手,我只能推测。
    • nspawn 和 podman 更容易在容器中安装 Systemd,podman 使用与 docker 相同的命令,因此无需学习
    【解决方案2】:

    你可以使用 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 在 ubuntu 已经转为使用 systemd 的意义上它已被弃用,因此在 docker 容器中为 upstart 工作所做的工作对于 14.10 之后的 ubuntu 版本将不再有用。跨度>
    • 我当前的客户(在撰写本文时)使用的是 14.04,并且在官方支持结束之前似乎没有升级计划,所以它对我来说并没有被弃用!
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 2014-11-22
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2014-09-24
    • 2022-01-14
    相关资源
    最近更新 更多