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