我的服务器运行Ubuntu 16.04,Docker 17.03.0-ce运行Nginx容器。该服务器还安装了ConfigServer Security & Firewall。启动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来停止这些电子邮件提醒,但我想先了解一些事情。
我确信还有其他问题,但基本上,为什么会按照报道方式报告?
答案 0 :(得分:1)
我至少可以回答前两个问题:
与真实虚拟机不同,Docker容器只是在主机系统内核下运行的进程集合。它们只对某些系统资源有不同的视图,包括它们自己的文件层次结构,它们自己的PID命名空间和它们自己的/etc/passwd
文件。因此,如果您在主机上ps aux
,它们仍会显示。
nginx容器/etc/passwd
包含用户&nbspx' nginx'使用运行nginx工作进程的UID 104。但是,在主持人/etc/passwd
中,UID 104可能属于完全不同的用户,例如systemd-timesync
。
因此,如果您在容器中运行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资源阈值的容器。