有没有让 docker 容器休眠的方法

2025 年 4 月 28 日
 juzi214032

我的 nas 上部署了很多 docker 服务,但其中有相当一部分是一些工具类的(使用频率低,可能几天或者几周用一次),我希望能在持续多长时间没有访问容器后,将容器销毁或者类似休眠,能释放资源就行。在下一次访问的时候,自动拉起容器(可以接受启动时间稍长一些)。有点类似于弹性扩缩容,但需要缩容到 0 。我现在是在飞牛上用 docker compose 部署的容器,暂时没看到什么好方法

3922 次点击
所在节点    Docker
28 条回复
ThirdFlame
2025 年 4 月 28 日
写个 crontab 定时销毁?
Phant0m
2025 年 4 月 28 日
docker —rm 用完退出就销毁了。
自动拉起创建需要你自己写一个服务。
PeiXyJ
2025 年 4 月 28 日
弄一个 k3s , 要用的时候把副本改为 1 个,不用了就把副本改为 0
juzi214032
2025 年 4 月 28 日
@PeiXyJ 那跟我手动启停也没啥区别了
juzi214032
2025 年 4 月 28 日
@ThirdFlame 定时太粗暴了,万一那时候我正在用,而且也不知道啥时候应该把服务拉起来
juzi214032
2025 年 4 月 28 日
@Phant0m 就是想看看有没有现成的方案
KagurazakaNyaa
2025 年 4 月 28 日
你是想要类似 lambda/worker 这种调用时自动创建容器,跑完自动销毁的方式吧?
deepblue1
2025 年 4 月 28 日
这个需求应该是要自己实现的,目前已知没有这种
KagurazakaNyaa
2025 年 4 月 28 日
https://www.openfaas.com/
https://openwhisk.apache.org/
https://knative.dev/
试试这几个,如果是你自己写的容器应该很容易改成基于事件触发的
如果是要基于请求启动容器,可以参考这篇文章
https://www.atlassian.com/blog/developer/docker-systemd-socket-activation
hosiet
2025 年 4 月 28 日
你的说法让我想起了 systemd 的 socket activation 。核心思路应该是一样的。
yinmin
2025 年 4 月 28 日
以前用 python flask 写过一个 web 系统,点击功能后会检查容器状态,如果容器未启动就启动起来,然后等 3 秒再跳转到对应容器的 web 界面。

当时是 web 系统里的一个用户对应一个独立的容器,如果用户 logout/timeout 就销毁容器。

你可以让 gpt 或者 claude 写程序然后部署,实现类似功能。
yinmin
2025 年 4 月 28 日
如果 OP 有编程功底,可以让 gpt 协助你写一个程序,监听 tcp 端口,做 tcp 反向代理到后端容器,如果有新 tcp 连接去判断一下后端容器状态,按需启动。如果长时间没有 tcp 连接,就暂停后端容器。
worker201
2025 年 4 月 28 日
写个简单的 http 服务, 加上简单的鉴权, 比如
访问 https://example.com/service-a/on?token=xxx 就调用启动脚本
访问 https://example.com/service-a/off?token=xxx 就调用关停脚本
然后把地址保存成书签或者快捷方式放到桌面上
bkmi
2025 年 4 月 28 日
要说省资源没必要吧,我以前也总想着让硬盘休眠,折腾过几次后面没管了,都不关注了,跑了很多年
Yadomin
2025 年 4 月 28 日
这种需求需要用 faas 平台吧,faas-netes, openfaas 这种。
但是我觉得你跑这种平台本身的消耗可能都比那些容器更多了
lizhian
2025 年 4 月 28 日
我的建议,worker 吧,或者 claw cloud run 上面部署
LiaoMatt
2025 年 4 月 28 日
free memory is wasting memory
没有真的遇到因此产生的问题, 完全可以不用管的
Kumo31
2025 年 4 月 28 日
写个简单 proxy ,没调用就 kill -SIGSTOP <PID>,恢复就 kill -SIGCONT <PID>
newaccount
2025 年 4 月 28 日
内存就是用来用的
内存不够的时候会把不用的置换掉
别整这些没用的,让系统自己管理就好
sofukwird
2025 年 4 月 28 日
如果你用 caddy 可以试试这个插件 https://github.com/shynome/caddy2-tmpdocker
在请求进来的时候把服务拉起来,但是基于 docker service 而不是 docker compose

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1128566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX