ylilike 发表于 2022-7-30 17:17:03

node-red 之 一键重启容器

本帖最后由 ylilike 于 2022-7-30 18:00 编辑

有时候需要重要一下容器,不管是用命令docker restart container_name
或者 https://cdn.nlark.com/yuque/0/2022/jpeg/29632632/1659150365714-0fe9d390-cda0-41e8-9ac9-b33641a7bfaa.jpeg进入 portainer 选中 container_name重启总归是有点繁琐……那么问题来了,有什么简单方便的方法,或者,做个开关一键重启呢?答案显然是 :yes前置条件要有portainer,重启调用了portainer API 的 restart 命令抓登陆包首先,打开浏览器,按F12开发者工具,然后,登陆一下portainer,找到authhttps://cdn.nlark.com/yuque/0/2022/png/29632632/1659150652458-9471605e-5f6b-492e-ad7e-d4b76f0cf871.png得到request:
Request URLULhttp://192.168.3.5:9000/api/auth
Request MethodPOST
Request payload{"username":"admin","password":"12342234"}
响应的结果为:{"jwt":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsInJvbGUiOjEsInNjb3BlIjoiZGVmYXVsdCIsImV4cCI6MTY1Nzc5Mjg0M30.C51VqcP2F_YwaLceMAufxxQE-ufvMxcvkk6XQ2V4zyc"}
这就是auth验证的关键在node-red中构造请求https://cdn.nlark.com/yuque/0/2022/png/29632632/1659151257897-53d3234b-7c0e-4881-87f7-a546e1efeb9a.pngpayload 用 function ,内容如下:https://cdn.nlark.com/yuque/0/2022/png/29632632/1659151449980-98b295c3-b6a5-4f49-b0a2-c86ea23158f5.png点击时间戳,得到 jwt认证tokenhttps://cdn.nlark.com/yuque/0/2022/png/29632632/1659151392451-3886edc5-b8f4-4257-b7de-a05099aafe90.png抓取重启的包有了token再来抓个重启的包:https://cdn.nlark.com/yuque/0/2022/png/29632632/1659151709569-18fff848-73e2-4011-bdb2-8b0f6cc5a687.png
Request URLULhttp://192.168.3.5:9000/api/endpoints/2/docker/containers/5a5954dc3e7322039a90baa5eba62b4de43d725625fae168bea1ef4c96f77b4e/restart
Request MethodPOST
Request payload{}
url中那一长串,是容器的idhttps://cdn.nlark.com/yuque/0/2022/png/29632632/1659151982146-e253050e-ced2-4681-9ebd-b1faa740fbfd.pngauth 已经在上一步获取到了,万事俱备,只欠构造!构造重启请求https://cdn.nlark.com/yuque/0/2022/png/29632632/1659152161129-8830d83b-cc22-4a97-8689-0c17eefdabb3.pngauth调用上步登陆取的jwt值,写进headers中,id值从portainer中取到。https://cdn.nlark.com/yuque/0/2022/png/29632632/1659152140560-45c0fa79-5bcf-4116-8494-fc8df7015073.pngrequest节点请求方式选 : 用msg method 设定https://cdn.nlark.com/yuque/0/2022/png/29632632/1659152189351-bbc3c860-972a-4458-8f81-df3d80bcc7df.png这样就可以手动从node-red中重启容器了。home-assistant 中调用一键重启这方式就多种多样了,我就拿mqtt来做个开关,一键重启了。做一个虚拟的mqtt开关switch:- platform: mqtt    name: "重启smb"    state_topic: "/restart_smb/stat"    command_topic: "/restart_smb/cmmd"    payload_on: "on"    payload_off: "off"
写入home-assistant的配置文件中并重启。然后到node-red中加入 mqtt 做关联:如下图https://cdn.nlark.com/yuque/0/2022/png/29632632/1659155456478-6d5f1788-77ff-4ea8-b258-554d948bc741.png导出的流分享如下:
详见附件https://www.bilibili.com/video/bv1PG411h7dm

wangling75 发表于 2022-7-30 17:47:18

看起来不错

s2233 发表于 2022-7-30 21:28:30

容器id好像是会变的,期待有更好的方法:$

ylilike 发表于 2022-7-31 11:33:09

s2233 发表于 2022-7-30 21:28
容器id好像是会变的,期待有更好的方法

你不升级 修改就不会变,不过,可以获取ID的,流我也写好了:loveliness:
页: [1]
查看完整版本: node-red 之 一键重启容器