【问题标题】:Start Docker container using systemd socket activation?使用 systemd 套接字激活启动 Docker 容器?
【发布时间】:2014-09-07 14:56:53
【问题描述】:

是否可以使用 systemd 的 socket activation 功能启动暴露(监听)端口的单个 Docker 容器,例如 Web 服务器?这个想法是通过仅在第一次真正需要容器时启动容器来节省资源(并且可能在空闲时再次停止以节省资源)。

注意:这个问题不是关于使用套接字激活(已经是supported)启动 Docker 守护程序本身,而是关于按需启动单个容器。

【问题讨论】:

  • 我认为这是可能的,但很难找到周围的任何东西。我准备写一篇博文,但仍然无法弄清楚如何将套接字从主机传递到启动的 docker .也许只是将它安装为一个卷.. 这里有一些阅读:0pointer.de/blog/projects/socket-activated-containers.htmllibvirt.org/drvlxc.html#activation
  • 是否需要使用systemd的socket激活功能?使用 Docker API 按需启动和停止容器怎么样?
  • 有没有找到解决办法,在进程不使用时关闭进程?
  • Arka:我还没有花时间在这上面,因为甚至还缺少套接字激活。但我猜服务器可能会尝试跟踪活动,并且当它空闲足够长的时间时会触发关闭。
  • developer.atlassian.com/blog/2015/03/… 这不是你想要的吗?

标签: docker systemd


【解决方案1】:

简而言之,你不能。

但是,如果您想找到解决方案,您首先需要运行像 CoreOSgeard 这样的工具,在 systemd 服务中运行每个 Docker 容器。

即便如此,Docker 对继承套接字的支持也来了又去。我知道 geard 是working on stable support。 CoreOS 已发布对socket activation in Go 的通用支持。 Red Hat 人员还在 Fedora 的 Docker 软件包中添加了 related patches,这些软件包使用 Go 的套接字激活库并改进了“前台模式”,这是使其工作的关键组件。

(我是来自 Lennart 的 early article on socket activation of containers 的 David Strauss,这个话题让我很感兴趣。我已通过电子邮件向 Red Hat 的补丁作者发送电子邮件并联系了 geard 团队。我会尽量保持更新这个答案.)

【讨论】:

  • 我实际上是在视频之后阅读了这篇文章 :) 我正在运行 CoreOS。但即使 Docker 在 systemd 中,我也从未见过带有套接字激活功能的。感谢您的回答,所有讨论的很多链接:) 我必须做一些测试,但我很确定这是可行的。我会在这里通知你:)
  • 关键是能够将容器中的套接字侦听器指定为继承自 systemd。我还没有看到一个稳定的实现。
  • 它来了 :) github.com/coreos/rocket/issues/106 虽然不是 Docker :)
  • @PierreOzoux Rocket 的开发人员(CoreOS 团队)长期以来一直是 systemd 社区的优秀成员和项目的主要贡献者。
【解决方案2】:

如果必须使用 systemd,上个月有一篇关于此的博文,here(我自己还没有尝试过)。

如果技术的选择不是硬性限制,你可以用你最喜欢的编程语言编写一个小代理,然后简单地调用 Docker API 来确保容器启动。 snickers(我的实验性 nodejs 代理)就是这样做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多