主机监控从docker集装箱

虽然我相信答案是否定的,但我仍然应该问:是否可以从Docker容器中监视主机系统? 为了使部署和升级更容易,我希望可以在容器中放置一些监控工具。 具体来说,我正在考虑像atop,sar等工具

思考?

谢谢。

Docker的隔离理念可以通过将主机目录挂载到容器(例如Datadog客户端)或者在“ 特权 ”容器模式下运行容器来规避。 这可以防止pid / network / ipc / disk / uts命名空间,允许访问所有设备,并像在主机上一样有效地启动进程。

这些工具在不可变主机系统(如CoreOS)上运行时非常有用。

但是,如果只想访问主机的某些部分,则不需要特权模式。 例如,Datadog当前使用这些标记(特定于其监视要求)启动其代理 (“监视容器”):

docker run -d --name dd-agent -h `hostname` \ -v /var/run/docker.sock:/var/run/docker.sock -v /proc/:/host/proc/:ro \ -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY={your_api_key_here} \ datadog/docker-dd-agent 

(请注意卷挂载提供对主机proccgroup目录的只读访问,以及docker套接字[监视守护进程])

Sysdig Cloud需要特权模式,因为它具有更深的系统自检function,同时还可以挂载设备,进程,引导,模块和用户目录:

 docker run --name sysdig-agent --privileged --net host --pid host \ -e ACCESS_KEY=[ACCESS_KEY] -e TAGS=[TAGS] \ -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev \ -v /proc:/host/proc:ro -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro sysdig/agent 

也可以使用--cap-add--cap-drop来添加和撤销单独的function 。

CoreOS提供了一个toolbox脚本(与新的docker-toolbox截然不同),可以使用systemd-nspawn而不是systemd-nspawn启动这种容器风格 – 它们都运行容器。

systemd-nspawn与Docker有不同的语法,但效果仍然相同 – 主机系统与容器( 源 )共享:

 sudo systemd-nspawn \ --directory="${machinepath}" \ --capability=all \ --share-system \ --bind=/:/media/root \ --bind=/usr:/media/root/usr \ --bind=/run:/media/root/run \ --user="${TOOLBOX_USER}" "$@" 

总之,您可以启动一个容器并安装debugging工具,通过使用具有特定卷挂载和/或 – --privileged--privileged 工具箱来检查主机(以及扩展,其他容器)。


NB我个人喜欢debugging容器是Sysdig :“想想sysdig作为strace + tcpdump + htop + iftop + lsof + …真棒酱。 – 目前看起来像:

 docker run -i -t --name sysdig --privileged \ -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev \ -v /proc:/host/proc:ro -v /boot:/host/boot:ro \ -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro sysdig/sysdig 

请看看google的工具cadvisor 。

cadvisor挂载/sys/var/run/ ,因此能够监视主机。

Docker容器不应该知道主机,所以这是违背Docker /进程隔离原则的。 你可能会发现一些技巧,但不build议这样做。

我发现你可以做的一件事就是捕获使用inotify在主机中发生的文件系统事件。 我在我的inotify命令容器中使用它。 但谁知道这是否会持续下去…