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

2020-08-30 00:15:37 +08:00
 Te11UA

我希望能使用 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 输出了,都是空白,但是日志文件是正常的,这是为啥呢?有没有解决方法?

3470 次点击
所在节点    Docker
4 条回复
also24
2020-08-30 00:32:52 +08:00
可以使用 tee 把日志同时输出到两个文件。

用法:echo "haha" | tee file1 file2
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
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
2020-08-30 21:37:32 +08:00
@also24 已解决,在 docker-entrypoint.sh 中添加可以,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX