我的 nas 上部署了很多 docker 服务,但其中有相当一部分是一些工具类的(使用频率低,可能几天或者几周用一次),我希望能在持续多长时间没有访问容器后,将容器销毁或者类似休眠,能释放资源就行。在下一次访问的时候,自动拉起容器(可以接受启动时间稍长一些)。有点类似于弹性扩缩容,但需要缩容到 0 。我现在是在飞牛上用 docker compose 部署的容器,暂时没看到什么好方法
1 ThirdFlame 165 天前 写个 crontab 定时销毁? |
![]() | 2 Phant0m 165 天前 via iPhone docker rm 用完退出就销毁了。 自动拉起创建需要你自己写一个服务。 |
![]() | 3 PeiXyJ 165 天前 弄一个 k3s , 要用的时候把副本改为 1 个,不用了就把副本改为 0 |
4 juzi214032 OP @PeiXyJ 那跟我手动启停也没啥区别了 |
5 juzi214032 OP @ThirdFlame 定时太粗暴了,万一那时候我正在用,而且也不知道啥时候应该把服务拉起来 |
6 juzi214032 OP @Phant0m 就是想看看有没有现成的方案 |
![]() | 7 KagurazakaNyaa 165 天前 你是想要类似 lambda/worker 这种调用时自动创建容器,跑完自动销毁的方式吧? |
![]() | 8 deepblue1 165 天前 这个需求应该是要自己实现的,目前已知没有这种 |
![]() | 9 KagurazakaNyaa 165 天前 ![]() https://www.openfaas.com/ https://openwhisk.apache.org/ https://knative.dev/ 试试这几个,如果是你自己写的容器应该很容易改成基于事件触发的 如果是要基于请求启动容器,可以参考这篇文章 https://www.atlassian.com/blog/developer/docker-systemd-socket-activation |
10 hosiet 165 天前 via Android ![]() 你的说法让我想起了 systemd 的 socket activation 。核心思路应该是一样的。 |
11 yinmin 165 天前 via iPhone 以前用 python flask 写过一个 web 系统,点击功能后会检查容器状态,如果容器未启动就启动起来,然后等 3 秒再跳转到对应容器的 web 界面。 当时是 web 系统里的一个用户对应一个独立的容器,如果用户 logout/timeout 就销毁容器。 你可以让 gpt 或者 claude 写程序然后部署,实现类似功能。 |
12 yinmin 165 天前 via iPhone 如果 OP 有编程功底,可以让 gpt 协助你写一个程序,监听 tcp 端口,做 tcp 反向代理到后端容器,如果有新 tcp 连接去判断一下后端容器状态,按需启动。如果长时间没有 tcp 连接,就暂停后端容器。 |
![]() | 13 worker201 165 天前 写个简单的 http 服务, 加上简单的鉴权, 比如 访问 https://example.com/service-a/on?token=xxx 就调用启动脚本 访问 https://example.com/service-a/off?token=xxx 就调用关停脚本 然后把地址保存成书签或者快捷方式放到桌面上 |
![]() | 14 bkmi 165 天前 via Android 要说省资源没必要吧,我以前也总想着让硬盘休眠,折腾过几次后面没管了,都不关注了,跑了很多年 |
15 Yadomin 165 天前 |
16 lizhian 165 天前 我的建议,worker 吧,或者 claw cloud run 上面部署 |
![]() | 17 LiaoMatt 165 天前 ![]() free memory is wasting memory 没有真的遇到因此产生的问题, 完全可以不用管的 |
![]() | 18 Kumo31 165 天前 写个简单 proxy ,没调用就 kill -SIGSTOP <PID>,恢复就 kill -SIGCONT <PID> |
![]() | 19 newaccount 165 天前 内存就是用来用的 内存不够的时候会把不用的置换掉 别整这些没用的,让系统自己管理就好 |
20 sofukwird 165 天前 via Android 如果你用 caddy 可以试试这个插件 https://github.com/shynome/caddy2-tmpdocker 在请求进来的时候把服务拉起来,但是基于 docker service 而不是 docker compose |
![]() | 21 Immortal 165 天前 同意 17L 如果没有遇到资源紧张,没必要折腾这种事情. |
22 BernieDu 165 天前 portainer 的 stack ( compose ) 关闭的时候会销毁对应的容器,你看看 |
![]() | 23 Soar360 165 天前 你是不是在找:IIS ? |
24 JoeJasper 165 天前 基于 aya-rs 框架来写 ebpf 程序内核级别监听网卡 tcp 的 syn 包来作弹性伸缩 |
25 THESDZ 165 天前 ![]() |
![]() | 26 goodryb 165 天前 以前也想过能不能搞个类似的东西,后来想想 nas 用不用都开着机,干嘛还要折腾这个,不够了直接加内存 |
27 ala2008 165 天前 用到是时候再手动启动,也不是很麻烦,可以写一个脚本 |
![]() | 28 KousukeSakurako 164 天前 docker pause 命令可以,也有 api ,可以写个脚本或者服务调用一下。然后配合 nginx 的 mirror 镜像流量来判断是否有请求 |