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

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

  •  
  •   juzi214032 · 39 天前 · 2661 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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