可以使用 systemd 的套接字激活功能来启动公开(侦听)端口的单个 Docker 容器(例如 Web 服务器)吗?这个想法是通过仅在第一次实际需要时启动容器来节省资源(并且可能在空闲时再次停止以节省资源)。
注意:这个问题不是关于使用套接字激活(已经支持)启动Docker守护进程本身,而是关于按需启动单个容器。
简而言之,你不能。
但是,如果您想找到解决方案,您首先需要运行像 CoreOS 或 geard 这样的工具来运行 systemd 服务中的每个 Docker 容器。
即便如此,Docker 对继承套接字的支持也已经消失了。我知道 geard 正在致力于稳定的支持。 CoreOS 已发布对 Go 中套接字激活的普遍支持。 Red Hat 人员还在 Fedora 的 Docker 软件包中添加了相关补丁,这些补丁使用 Go 的套接字激活库并改进了“前台模式”,这是使其工作的关键组件。
(我是 Lennart关于容器套接字激活的早期文章中的 David Strauss,这个主题让我很感兴趣。我已经给 Red Hat 的补丁作者发了电子邮件,并联系了 geard 团队。我会尽力保持这个答案更新。)
Podman。有关详细信息,请参阅Podman套接字激活教程。 Podman 从 3.4.0 版本(2021 年 9 月发布)开始支持套接字激活。
(Docker 尚不支持容器的套接字激活,因此您需要使用 Podman 来实现)示例 1:mariadb
systemd、podman 和 MariaDB 容器设置 socket 激活:
https://github.com/eriksjolund/mariadb-podman-socket-activation
MariaDB自版本10.6(2021年4月发布)开始支持套接字激活
示例2:nginxhttps://github.com/eriksjolund/podman-nginx-socket-activation
另请参阅我的回答snickers (我的实验性 Nodejs 代理)的做法。