是否可以使用 systemd 的套接字激活功能启动暴露(监听)端口的单个 Docker 容器,例如 Web 服务器?这个想法是通过仅在第一次实际需要时启动容器来节省资源(并且可能在空闲时再次停止以节省资源)。
注意:这个问题不是关于使用套接字激活(已经支持)启动 Docker 守护进程本身,而是关于按需启动单个容器。
是否可以使用 systemd 的套接字激活功能启动暴露(监听)端口的单个 Docker 容器,例如 Web 服务器?这个想法是通过仅在第一次实际需要时启动容器来节省资源(并且可能在空闲时再次停止以节省资源)。
注意:这个问题不是关于使用套接字激活(已经支持)启动 Docker 守护进程本身,而是关于按需启动单个容器。
简而言之,你不能。
但是,如果你想找到一个解决方案,你首先需要运行一个像 CoreOS 或 geard 这样的工具,在systemd服务中运行每个 Docker 容器。
即便如此,Docker 对继承套接字的支持也来了又去。我知道 geard 正在努力提供稳定的支持。CoreOS 已经发布了对Go 中套接字激活的通用支持。Red Hat 人员还为 Fedora 的 Docker 软件包添加了相关补丁,这些补丁使用 Go 的套接字激活库并改进了“前台模式”,这是使其工作的关键组件。
(我是 Lennart关于容器的套接字激活的早期文章中的 David Strauss ,这个主题让我很感兴趣。我已通过电子邮件向 Red Hat 的补丁作者发送电子邮件并联系了齿轮团队。我会尽量保留这个答案更新。)
是的,您可以使用Podman。Podman 从版本 3.4.0(2021 年 9 月发布)开始支持套接字激活。
我写了一个小示例演示如何使用systemd、podman和MariaDB容器设置套接字激活:
https://github.com/eriksjolund/mariadb-podman-socket-activation
MariaDB从版本10.6(2021 年 4 月发布)开始支持套接字激活