虽然我认为答案是否定的,但我觉得我仍然应该问:是否可以从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
Run Code Online (Sandbox Code Playgroud)
(注意卷安装提供对主机proc和cgroup目录的只读访问权限,以及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
Run Code Online (Sandbox Code Playgroud)
也可以使用和添加和撤消各个功能.--cap-add--cap-drop
CoreOS提供了一个toolbox脚本(不同于新的docker-toolbox)来为您启用这种样式的容器,systemd-nspawn而不是docker- 它们都运行容器.
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}" "$@"
Run Code Online (Sandbox Code Playgroud)
总之,您可以通过使用具有特定卷装入和/ --privileged或CoreOS 工具箱的 Docker来启动容器并安装可以检查主机(以及扩展名,其他容器)的调试工具.
我个人对调试容器的偏好是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3842 次 |
| 最近记录: |