docker 容器如何控制宿主机的服务状态?

2017-12-25 16:15:44 +08:00
 qsnow6

容器内需要使用宿主机提供的服务,某些情况下需要控制宿主机的服务状态(service XXX start|stop);

下面列了几种解决方案,但是实现起来有点啰嗦,或许容器可以直接控制宿主机的服务?

备用解决方案

  1. 在宿主机搭个 HTTP 服务,通过 HTTP 来通信,例如:

    http://127.0.0.1/start -> service xxx start

    http://127.0.0.1/stop -> service xxx stop

  2. 跟上面差不多监控某个目录 or 文件,出现指定特征就触发对应的指令。

4033 次点击
所在节点    Docker
6 条回复
hcymk2
2017-12-25 16:37:34 +08:00
控制不好的话,感觉是做死行为。
qsnow6
2017-12-25 16:46:03 +08:00
@hcymk2 作死也要死过一回才甘心啊

可有提示
zmj1316
2017-12-25 16:56:16 +08:00
potainer 在容器里面控制 docker 宿主是通过挂载外面的 socket 文件进去来控制的
zuolan
2017-12-25 17:02:12 +08:00
那我提供一个作死思路:

Linux 下不是有个 chroot 工具吗, 把宿主机的根目录挂载到容器中(-v /:/host_dir), 容器给够权限, 然后在容器里面执行 chroot 命令(chroot /host_dir /bin/sh), 这样就可以获得宿主机几乎全部 root 功能, 自由操作吧.

参考 Dockerfile:
```
FROM busybox
ENTRYPOINT ["chroot","/host_dir","/bin/sh -c"]
```

参考启动方式:
```
docker run -v /:/host_dir --name chroot --privileged --rm -it IMAGE_NAME "service XXX start|stop"
```

其中的"service XXX start|stop"就是你想在宿主机执行的命令, 包括监控什么的随便你玩了.

这个做法很作死, 哈.
qsnow6
2017-12-25 17:18:01 +08:00
@zuolan 我试试哈
ryd994
2017-12-26 03:41:02 +08:00
SNMP trap

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

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

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

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

© 2021 V2EX