【问题标题】:Nginx logs in both file as well as docker log collectorNginx 记录在文件和 docker 日志收集器中
【发布时间】:2020-02-27 07:17:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: docker nginx logging symlink nginx-log


    【解决方案1】:

    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 本身将日志转发到外部服务器或主机节点上的文件,而不是在容器中保留副本。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 那有什么问题?
      • 它没有出现在容器日志中,我在容器日志中看到“没有可用的日志”
      • 也许你需要检查你的脚本。你能在这里分享脚本吗?
      • Dockerfile ENTRYPOINT ["/etc/nginx/docker-entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"] docker-entrypoint.sh #!/bin/sh tail -f /dev/stdout /var/log/nginx/access.log && tail -f /dev/stderr /var/log/nginx/error.log
      猜你喜欢
      • 2017-02-04
      • 2018-06-05
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多