官方 Nginx Docker 镜像将 access.log 重定向到 /dev/stdout,这样就可以docker log
从 docker 外部(即主机上)访问日志。这是一个问题,因为我无法从 docker 容器内部访问 access.log。
我最终在 Mac 上安装 nginx 并执行以下命令
docker logs -f competent_edison &>> ~/Dev/monitoring/access.log
虽然重定向工作正常,并且我的 Mac 上的 access.log 实时镜像容器的输出,但是当我将该文件作为参数传递时,ngxtop 什么也不输出:ngnix -l ~/Dev/monitoring/access.log
我想知道是否有办法在主机上安装 ngxtop 来监控在容器中运行的 nginx。
请提供任何有用的指示,因为我花了两天时间解决这个问题,但不知道如何处理。
答案1
当然可以。执行如下操作
docker logs -f <nginx-pod-name> | tee -a <nginx-pod-name>.log > /dev/null & docker run -t --rm -v <nginx-pod-name>.log:/var/log/nginx/access.log:ro mishunika/ngxtop
因此分解一下:docker logs -f <nginx-pod-name>
获取日志流。
然后| tee -a <nginx-pod-name>.log > /dev/null
将输出通过管道tee
附加到主机上的文件中(同时使 STDOUT 静音)。
最后,启动 ngxtop 并通过 将日志文件从主机挂载到 ngxtop 容器docker run -t --rm -v <nginx-pod-name>.log:/var/log/nginx/access.log:ro mishunika/ngxtop
。
该解决方案没有考虑轮换本地日志文件,但我认为这是为了故障排除目的,所以没有必要。