V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
juzi214032
V2EX  ›  Docker

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

  •  
  •   juzi214032 · 1 天前 · 1811 次点击

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

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

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

    你可以让 gpt 或者 claude 写程序然后部署,实现类似功能。
    yinmin
        12
    yinmin  
       1 天前 via iPhone
    如果 OP 有编程功底,可以让 gpt 协助你写一个程序,监听 tcp 端口,做 tcp 反向代理到后端容器,如果有新 tcp 连接去判断一下后端容器状态,按需启动。如果长时间没有 tcp 连接,就暂停后端容器。
    worker201
        13
    worker201  
       1 天前
    写个简单的 http 服务, 加上简单的鉴权, 比如
    访问 https://example.com/service-a/on?token=xxx 就调用启动脚本
    访问 https://example.com/service-a/off?token=xxx 就调用关停脚本
    然后把地址保存成书签或者快捷方式放到桌面上
    bkmi
        14
    bkmi  
       1 天前 via Android
    要说省资源没必要吧,我以前也总想着让硬盘休眠,折腾过几次后面没管了,都不关注了,跑了很多年
    Yadomin
        15
    Yadomin  
       1 天前
    这种需求需要用 faas 平台吧,faas-netes, openfaas 这种。
    但是我觉得你跑这种平台本身的消耗可能都比那些容器更多了
    lizhian
        16
    lizhian  
       1 天前
    我的建议,worker 吧,或者 claw cloud run 上面部署
    LiaoMatt
        17
    LiaoMatt  
       1 天前   ❤️ 3
    free memory is wasting memory
    没有真的遇到因此产生的问题, 完全可以不用管的
    Kumo31
        18
    Kumo31  
       1 天前
    写个简单 proxy ,没调用就 kill -SIGSTOP <PID>,恢复就 kill -SIGCONT <PID>
    newaccount
        19
    newaccount  
       1 天前
    内存就是用来用的
    内存不够的时候会把不用的置换掉
    别整这些没用的,让系统自己管理就好
    sofukwird
        20
    sofukwird  
       1 天前 via Android
    如果你用 caddy 可以试试这个插件 https://github.com/shynome/caddy2-tmpdocker
    在请求进来的时候把服务拉起来,但是基于 docker service 而不是 docker compose
    Immortal
        21
    Immortal  
       1 天前
    同意 17L
    如果没有遇到资源紧张,没必要折腾这种事情.
    BernieDu
        22
    BernieDu  
       1 天前
    portainer 的 stack ( compose ) 关闭的时候会销毁对应的容器,你看看
    Soar360
        23
    Soar360  
       1 天前
    你是不是在找:IIS ?
    JoeJasper
        24
    JoeJasper  
       1 天前
    基于 aya-rs 框架来写 ebpf 程序内核级别监听网卡 tcp 的 syn 包来作弹性伸缩
    THESDZ
        25
    THESDZ  
       1 天前   ❤️ 1
    goodryb
        26
    goodryb  
       1 天前
    以前也想过能不能搞个类似的东西,后来想想 nas 用不用都开着机,干嘛还要折腾这个,不够了直接加内存
    ala2008
        27
    ala2008  
       1 天前
    用到是时候再手动启动,也不是很麻烦,可以写一个脚本
    KousukeSakurako
        28
    KousukeSakurako  
       14 小时 25 分钟前
    docker pause 命令可以,也有 api ,可以写个脚本或者服务调用一下。然后配合 nginx 的 mirror 镜像流量来判断是否有请求
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2884 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 13:59 · PVG 21:59 · LAX 06:59 · JFK 09:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.