juzi214032
V2EX  ›  Docker

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

  •  
  •   juzi214032 · Apr 28, 2025 · 4820 views
    This topic created in 557 days ago, the information mentioned may be changed or developed.

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

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

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

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