了解Docker容器资源使用情况

我有运行Ubuntu 16.04的服务器运行一个Nginx容器的Docker 17.03.0-ce。 该服务器还安装了ConfigServer安全和防火墙 。 在启动Nginx容器后不久,我开始收到有关“过度使用资源”的电子邮件,其中包含以下详细信息:

Time: Fri Mar 24 00:06:02 2017 -0400 Account: systemd-timesync Resource: Process Time Exceeded: 1820 > 1800 (seconds) Executable: /usr/sbin/nginx Command Line: nginx: worker process PID: 2302 (Parent PID:2077) Killed: No 

我完全理解我可以将exe:/usr/sbin/nginx到csf.pignore来停止这些电子邮件警报,但是我想首先了解一些事情。

  • 为什么要报告“systemd-timesync”帐户? 这似乎与Docker没有任何关系。
  • 为什么主机似乎报告在容器中运行的东西时,过度的资源使用(扩展的处理时间)?
  • 为什么其他docker集装箱不运行Nginx不会导致过多的资源使用电子邮件?

我相信还有其他的问题,但基本上,这是为什么被报道的方式?

我至less可以回答前两个问题:

与真正的虚拟机不同,Docker容器只是在主机系统内核下运行的一系列进程。 他们对某些系统资源有不同的看法,包括他们自己的文件层次结构,他们自己的PID名称空间和他们自己的/etc/passwd文件。 因此,如果您在主机上运行,​​它们仍然会显示出来。

nginx容器的/etc/passwd包含一个运行nginx工作进程的UID为104的用户'nginx'。 但是,在主机的/etc/passwd ,UID 104可能属于完全不同的用户,例如systemd-timesync

因此,如果您运行ps aux | grep nginx 在容器中的ps aux | grep nginx ,你可能会看到

 nginx 7 0.0 0.0 32152 2816 ? S 11:20 0:00 nginx: worker process 

而在主机上,你看

 systemd-timesync 22004 0.0 0.0 32152 2816 ? S 13:20 0:00 nginx: worker process 

即使两者都是相同的过程(还要注意不同的PID名称空间;在容器中,PID从1再次计数)。

因此,容器进程仍然会受到ConfigServer的资源监视,但是它们可能会随机显示,甚至不存在用户帐户。

至于为什么nginx触发电子邮件和其他容器不这样做,我只能假设nginx是您的容器中唯一跨越ConfigServer的资源阈值的容器。