docker 磁盘空间健康检查未按预期工作

docker 磁盘空间健康检查未按预期工作

我有一个 nginx 容器,运行大约 10 天后磁盘就会满。因此,如果应用程序的新版本未发布,就会开始出现类似以下的错误;

2022/01/15 22:45:04 [crit] 13#13: *406812 mkdir() "/var/cache/nginx/uwsgi_temp/9/07" failed (28: No space left on device) while reading upstream...

2022/01/15 22:44:37 [crit] 13#13: *406820 pwritev() "/var/cache/nginx/client_temp/0000001078" failed (28: No space left on device)...

这件事发生在圣诞节假期,所以我认为最理想的情况是进行容器健康检查,确保有可用的磁盘空间。我以为我已经通过这个容器设置实现了这一点(但显然不是);

FROM nginx:1.21.5-alpine-perl

RUN apk update && \
    apk add --no-cache dnsmasq supervisor curl

COPY ./config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY ./config/nginx.conf /etc/nginx/nginx.conf

HEALTHCHECK --interval=15s --timeout=30s \
    CMD exit $(( $(df / | tail -n1 | awk '{print $5}' | sed 's/\%//') > 95 ? 1 : 0 )) || exit 1

我应该如何在健康检查中检查磁盘空间?

答案1

您应该检查您的 nginx 配置,并确保其缓存大小限制根据容器中可用的空间正确配置。

答案2

进入容器并检查其中哪个目录占用了空间du(我首先猜测是日志文件)。检查是否可以更改 nginx 配置,以使容器不会填满文件系统。如果不能,请在有问题的目录中挂载外部卷。

相关内容