Nginx 记录文件以及 docker 日志收集器

Nginx logs in both file as well as docker log collector

我正在部署一个 Nginx 容器并且在标准 Dockerfile 日志中使用这些命令重定向到容器日志

RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

如果我删除上述命令,日志将按预期写入 access.logerror.log 文件。 如何将日志保存在文件中并将它们发送到容器日志?

您可以尝试将日志写入文件,然后在入口点拖尾文件。

tail -f /var/log/nginx/access.log /var/log/nginx/error.log

1- 下面的命令不会将 /var/log/nginx/access.log 的内容重定向到 /dev/stdout,而是创建了一个从 /dev/stdout/var/log/nginx/access.log 的符号链接。换句话说,/var/log/nginx/access.log 只是一个符号链接。

ln -sf /dev/stdout /var/log/nginx/access.log
# ls -alh /var/log/nginx/access.log
lrwxrwxrwx 1 root root 11 Nov 23 01:12 /var/log/nginx/access.log -> /dev/stdout

2- 完全不建议将文件存储在 docker 容器中,原因有二。首先,一旦重新创建容器,文件就会丢失。其次,文件可能会增长到巨大的大小,特别是如果这些文件没有日志轮换。您可以使用 FluentD 或配置 docker 本身将日志转发到外部服务器或主机节点上的文件,而不是在容器中保留副本。