14

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

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

4

3 回答 3

12

简而言之,你不能。

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

即便如此,Docker 对继承套接字的支持也来了又去。我知道 geard 正在努力提供稳定的支持CoreOS 已经发布了对Go 中套接字激活的通用支持。Red Hat 人员还为 Fedora 的 Docker 软件包添加了相关补丁,这些补丁使用 Go 的套接字激活库并改进了“前台模式”,这是使其工作的关键组件。

(我是 Lennart关于容器的套接字激活的早期文章中的 David Strauss ,这个主题让我很感兴趣。我已通过电子邮件向 Red Hat 的补丁作者发送电子邮件并联系了齿轮团队。我会尽量保留这个答案更新。)

于 2014-09-04T16:42:39.667 回答
2

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

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

于 2015-04-05T12:11:02.153 回答
0

是的,您可以使用Podman。Podman 从版本 3.4.0(2021 年 9 月发布)开始支持套接字激活。

我写了一个小示例演示如何使用systemdpodmanMariaDB容器设置套接字激活:

https://github.com/eriksjolund/mariadb-podman-socket-activation

MariaDB从版本10.6(2021 年 4 月发布)开始支持套接字激活

另请参阅我的回答 https://stackoverflow.com/a/71188085/757777

于 2022-02-19T18:58:42.733 回答