nginx容器访问日志和错误日志的查看方法。
如何查看nginx-ubuntu容器中产生的访问日志和错误日志?
根据构建镜像时nginx的配置文件可知,日志分别为/var/log/nginx/access.log和/var/log/nginx/error.log。为了查看日志,我们需要进入容器内部查看这两个文件。方法如下图所示:

我们知道容器结束之后,在没有commit的情况下,数据不会落盘,也就说容器退出之后,日志也随之消失。我们希望可以长期保存日志,供我们回溯审计。那nginx官方镜像是如何管理日志的?
nginx官方镜像日志管理
nginx官方镜像可以使用 docker logs -f <container id>
查看日志,如下图所示:

我们知道docker logs可以查询Docker容器打印到标准输出和标准错误的信息,而nginx使用该方法供我们查询日志,那么肯定是nginx将日志打印到标准输出和标准错误了,或者日志被重定向到标准控制台。我们看下nginx的具体实现:

由上图我们可知:nginx官方镜像将 /var/log/nginx/access.log 重定向到标准输出;/var/log/nginx/error.log 从定向到标准错误。所以我们可以使用docker logs命令来获取nginx打印的日志。
Docker将容器日志在宿主机上存放为:/var/lib/docker/containers/<container-id>/<container-id>-json.log
。我们来验证下:

我们再看下该json文件的内容:

可见json文件内容,与我们使用docker logs命令查看的日志内容一致,区别只不过是内容以json结构来存储的。
修改nginx-ubuntu的Dockerfile,我们也支持docker logs
基于上文《容器技术#003#基于Docker+Ubuntu制作镜像nginx-ubuntu》 的Dockefile,我们做个简单的修改以作适配,该版本我们称为V1.1.0:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
FROM ubuntu:22.04
WORKDIR /opt/app
LABEL maintainer="mancode@sohu.com"
ENV NGINX_PACKAGE_PATH /opt/app/nginx ENV NGINX_PATH /usr/local/nginx
COPY ./nginx/nginx-1.25.4.tar.gz ${NGINX_PACKAGE_PATH}/nginx-1.25.4.tar.gz
COPY ./nginx/docs/index.html ${NGINX_PATH}/www/index.html
RUN apt update && apt install -y gcc g++ make libssl-dev libpcre3 libpcre3-dev zlib1g-dev \ && useradd -M -s /sbin/nologin nginx \ && cd ${NGINX_PACKAGE_PATH} && tar -zxf nginx-1.25.4.tar.gz && cd nginx-1.25.4 \ && ./configure \ --prefix=/usr/local/nginx \ --conf-path=/etc/nginx/nginx.conf \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_gzip_static_module \ --with-http_sub_module \ && make && make install \ && mkdir -p /var/log/nginx \ && mkdir -p /var/cache/nginx \ && ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log
COPY ./nginx/conf/ /etc/nginx/
ENTRYPOINT ["/usr/local/nginx/sbin/nginx", "-g", "daemon off; master_process on;"]
|
相关资源可以访问Github仓库 [ mancodenet/images/docker-nginx-ubuntu ] 下载。
构建说明:
- 当前版本与V1.0.0唯一的区别就是在创建日志目录文件之后,我们使用软链接命令,将 /var/log/nginx/access.log 和 /var/log/nginx/error.log 分别重定向到/dev/stdout 和 /dev/stderr。
- 重定向后nginx打印到日志文件的日志,就会输出到标准控制台上,从而被docker进程捕获,然后我们就可以使用docker logs命令查询,也可以到宿主机目录
/var/lib/docker/containers/<container-id>/
内查看json日志文件。
参考资料