不依赖 docker cli,只有一个/var/run/docker.sock,有办法用 Python 重启指定容器吗?

2022-09-23 01:09:32 +08:00
 edis0n0
需求是第二个容器暴露一个 API ,其它设备可以通过调用第二个容器的 API 随时重启第一个容器。类似 <https://stackoverflow.com/questions/56239199/restart-a-docker-container-from-another-running-container> 这个场景,找到的教程都是要在第二个容器装 docker cli 。我觉得太重了,] 有办法用 python 脚本直接重启吗?

(感觉肯定是有办法,但 google 找不到,但不会写 go ,不太想看 docker cli 的代码,只想调别人的轮子)
2127 次点击
所在节点    程序员
18 条回复
dangyuluo
2022-09-23 01:13:02 +08:00
dangyuluo
2022-09-23 01:13:29 +08:00
Jirajine
2022-09-23 01:30:09 +08:00
https://docker-py.readthedocs.io/en/stable/
当然,之前版本的 docker-compose 就是 Python 写的,自然不缺 docker api 的 SDK 。
edis0n0
2022-09-23 01:37:19 +08:00
@Jirajine #3 对,想找的就是这个,docker.from_env().get("container1_name").restart() 感觉一行代码就够。
MengiNo
2022-09-23 01:52:11 +08:00
之前看过一个在 php 容器里随时重启 nginx 容器。大概是通过 --pid 的方式让 nginx 容器与 php 容器共享一部分 proc 信息,这样两个容器内 ps 出来的内容就是一模一样的。然后只要在 php 容器里 pkill 掉 nginx 的进程,nginx 容器就会因为 "1 号进程" 没了而重启。 虽然有点暴力但是好像可以实现 op 要的效果。 但是缺点是一旦 php 容器停了,则会导致两个容器就一起停掉。
neilp
2022-09-23 06:36:03 +08:00
可以, 用 curl 直接 post 就可以。 Restful 的 api
rrfeng
2022-09-23 07:35:13 +08:00
第二个容器启动时把主机上的 docker cli 和 sock 映射进去就行了。不用单独安装。

这才是标准方式。
julyclyde
2022-09-23 08:23:21 +08:00
1 按说,容器就没有重启这一说法吧。内容应该都复原了,其实是销毁另建?
2 用 HTTP 协议访问那个 sock 就行了

0 你的需求是“暴露一个 API”似乎并不是说暴露 dockerd sock 吧?
zliea
2022-09-23 09:19:10 +08:00
docker 需要监听 2375 端口,可以在 systemd 文件 ExecStart 添加-H tcp://0.0.0.0:2375
然后就可以使用 docker api 了。
edis0n0
2022-09-23 10:29:18 +08:00
@julyclyde 我的场景是容器 1 的服务运行时会缓存一些内容,restart 就没了,需要做一个 HTTP API 给后台调用重启。
julyclyde
2022-09-23 10:55:43 +08:00
@edis0n0 这个调用是为了预热填充,还是为了主动让它失效?
alexsunxl
2022-09-23 10:57:12 +08:00
@zliea 你这个有点误导了。 通过 socket 也是可以 connenct dockerd 的,不需要端口的。
edis0n0
2022-09-23 10:57:12 +08:00
@julyclyde 为了主动让它失效
julyclyde
2022-09-23 10:57:59 +08:00
@edis0n0 这个需求我觉得在缓存管理方面实现比较好啊。整体重启可能代价有点高
ragnaroks
2022-09-23 11:22:11 +08:00
my3157
2022-09-23 20:57:26 +08:00
mount docker cli 和 sock 进去,想干啥干啥,
noparking188
2022-09-23 22:43:28 +08:00
@edis0n0 #10 不重启容器里的服务,而是选择重启容器,是因为考虑实现更简单吗?
edis0n0
2022-09-23 23:06:27 +08:00
@noparking188 #17 是

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882272

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX