使用systemd套接字激活启动Docker容器?

问题描述 投票:0回答:3

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

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

docker systemd
3个回答
13
投票

简而言之,你不能。

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

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

(我是 Lennart

关于容器套接字激活的早期文章中的 David Strauss,这个主题让我很感兴趣。我已经给 Red Hat 的补丁作者发了电子邮件,并联系了 geard 团队。我会尽力保持这个答案更新。)


3
投票
是的,您可以使用

Podman。有关详细信息,请参阅Podman套接字激活教程。 Podman 从 3.4.0 版本(2021 年 9 月发布)开始支持套接字激活。

(Docker 尚不支持容器的套接字激活,因此您需要使用 Podman 来实现)

示例 1:mariadb

我编写了一个小示例演示,介绍如何使用

systemdpodmanMariaDB 容器设置 socket 激活

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

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

示例2:nginx

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

另请参阅我的回答

https://stackoverflow.com/a/71188085/757777


2
投票
如果必须使用 systemd,上个月有一篇关于此的博客文章,

这里(我自己还没有尝试过)。

如果技术的选择不是硬性限制,您可以用您最喜欢的编程语言编写一个小型代理,然后简单地进行 Docker API 调用来确保容器启动。这就是

snickers (我的实验性 Nodejs 代理)的做法。

© www.soinside.com 2019 - 2024. All rights reserved.