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.log
和 error.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 本身将日志转发到外部服务器或主机节点上的文件,而不是在容器中保留副本。
我正在部署一个 Nginx
容器并且在标准 Dockerfile
日志中使用这些命令重定向到容器日志
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
如果我删除上述命令,日志将按预期写入 access.log
和 error.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 本身将日志转发到外部服务器或主机节点上的文件,而不是在容器中保留副本。