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

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

  •  
  •   qsnow6 · 2017-12-25 16:15:44 +08:00 · 3929 次点击
    这是一个创建于 2311 天前的主题,其中的信息可能已经有所发展或是发生改变。

    容器内需要使用宿主机提供的服务,某些情况下需要控制宿主机的服务状态(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 文件,出现指定特征就触发对应的指令。

    第 1 条附言  ·  2018-01-12 14:12:47 +08:00
    #4 结贴
    hcymk2
        1
    hcymk2  
       2017-12-25 16:37:34 +08:00
    控制不好的话,感觉是做死行为。
    qsnow6
        2
    qsnow6  
    OP
       2017-12-25 16:46:03 +08:00
    @hcymk2 作死也要死过一回才甘心啊

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

    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
        5
    qsnow6  
    OP
       2017-12-25 17:18:01 +08:00
    @zuolan 我试试哈
    ryd994
        6
    ryd994  
       2017-12-26 03:41:02 +08:00 via Android
    SNMP trap
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3896 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 00:56 · PVG 08:56 · LAX 17:56 · JFK 20:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.