从docker容器进行主机监控

时间:2015-10-28 17:13:10

标签: docker

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

思想?

感谢。

4 个答案:

答案 0 :(得分:6)

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

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

但如果您只想访问主机的某些部分,则不需要特权模式。例如,Datadog目前使用这些标志(特定于其监视要求)启动其agent("监视容器"):

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需要特权模式,因为它具有更深入的系统内省功能,同时还可以安装设备,进程,引导,模块和用户目录:

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也可以add and revoke individual capabilities

CoreOS提供toolbox脚本(与新docker-toolbox不同),使用systemd-nspawn代替docker为您启动此样式的容器 - 它们都运行容器。

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

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}" "$@"

总之,您可以通过使用具有特定卷装入和/或--privileged或CoreOS的Docker来启动容器并安装可以检查主机(以及扩展名,其他容器)的调试工具。 toolbox

n.b。我个人对调试容器的偏好是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

答案 1 :(得分:1)

请查看来自Google的工具cadvisor

cadvisor安装/sys/var/run/,因此能够监控主机。

答案 2 :(得分:0)

Docker容器不应该知道主机,因此这违反了Docker /进程隔离原则。你可能会发现一些技巧,但不推荐这样做。

答案 3 :(得分:0)

我发现您可以做的一件事是捕获使用inotify在主机中发生的文件系统事件。我在我的inotify-command容器中使用它。但谁知道这会持续......