V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Te11UA
V2EX  ›  Docker

docker nginx 日志如何同时 stdout 和挂载日志目录?

  •  
  •   Te11UA · 2020-08-30 00:15:37 +08:00 · 3446 次点击
    这是一个创建于 1549 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我希望能使用 docker logs 看到 Nginx 日志,并且我希望挂载目录 /var/log/nginx 到宿主机下供之后查看 在 Nginx 的 Dockerfile 中是这样写的

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

    这样直接 run 起来没啥问题,能使用 docker logs nginx 看到访问日志。然而如果我写了 docker-compose 文件中指定 volumes

        volumes:
          - ./nginx_logs:/var/log/nginx
    

    docker logs nginx 就无法看到 stdout 输出了,都是空白,但是日志文件是正常的,这是为啥呢?有没有解决方法?

    4 条回复    2020-08-30 21:37:32 +08:00
    also24
        1
    also24  
       2020-08-30 00:32:52 +08:00
    可以使用 tee 把日志同时输出到两个文件。

    用法:echo "haha" | tee file1 file2
    also24
        2
    also24  
       2020-08-30 00:38:47 +08:00
    修正,我忽略了你需要处理的是 nginx 的日志。
    那么可以在 nginx 的配置中,通过配置多条 access_log 来达到将 log 同时写入多个文件的目的。

    http://nginx.org/en/docs/http/ngx_http_log_module.html
    Several logs can be specified on the same level.
    also24
        3
    also24  
       2020-08-30 00:44:55 +08:00
    补充:
    我想了一下,应该也可以从 Dockerfile 入手 ,在 docker-entrypoint.sh 这个文件中,执行 ln -sf 命令。

    https://github.com/nginxinc/docker-nginx/blob/master/stable/alpine/docker-entrypoint.sh
    Te11UA
        4
    Te11UA  
    OP
       2020-08-30 21:37:32 +08:00
    @also24 已解决,在 docker-entrypoint.sh 中添加可以,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1362 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:38 · PVG 01:38 · LAX 09:38 · JFK 12:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.