首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将docker nginx访问日志存储在docker卷中

问将docker nginx访问日志存储在docker卷中
EN

Stack Overflow用户
提问于 2019-02-28 02:56:15
回答 2查看 9.1K关注 0票数 8

目前,我的docker容器正在将nginx访问日志打印到/dev/stdout。如何在docker容器中创建卷来存储访问日志?

我的Dockerfile:

代码语言:javascript
复制
FROM python:3.7

ENV APP_ROOT /src
ENV CONFIG_ROOT /config

RUN apt-get update
RUN apt-get install -y apt-utils
RUN apt-get -y install unixodbc-dev
RUN apt-get -y install default-libmysqlclient-dev

RUN mkdir ${CONFIG_ROOT}
COPY /app/requirements.txt ${CONFIG_ROOT}/requirements.txt
RUN pip install -r ${CONFIG_ROOT}/requirements.txt

RUN mkdir ${APP_ROOT}
WORKDIR ${APP_ROOT}

ADD /app/ ${APP_ROOT}

我的docker-compose.yml:

代码语言:javascript
复制
version: "3"

services:
  app:
    build: .
    container_name: django-gunicorn
    restart: always
    env_file:
      - django.env
    ports:
      - "8000:8000"
    command:
      "gunicorn --workers=2 --bind=0.0.0.0:8000 mysite.wsgi:application"

  nginx:
    image: nginx:1.14
    container_name: ngx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./app/static:/static
    depends_on:
      - app

我的nginx/default.conf:

代码语言:javascript
复制
limit_req_zone "$binary_remote_addr$request_uri" zone=one:10m rate=60r/m;

server {
    listen 80;
    server_name example.org;
    server_tokens off;

    location  /static/ {
        autoindex on;
        alias /static/;
    }

    location / {
        proxy_pass http://app:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        limit_req zone=one nodelay burst=30;

    }
}

我正在尝试将fail2ban和fluentd日志记录添加到此应用程序中,但首先我需要存储物理文件(而不是/dev/stout),该文件可用于其他日志记录目的。

谢谢你!

EN

回答 2

Stack Overflow用户

发布于 2020-07-23 23:01:39

默认情况下,Nginx容器将访问日志转发到STDOUT,将错误日志转发到STDERR。您可以在nginx Dockerfile中看到以下行:

代码语言:javascript
复制
# forward request and error logs to docker log collector
    && ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log \

所以您可以在容器日志中看到nginx日志:

代码语言:javascript
复制
docker logs -f ngx

但如果您希望将nginx日志存储在docker卷中,请先创建您的自定义nginx docker镜像:

代码语言:javascript
复制
FROM nginx
RUN rm /var/logs/nginx/*

然后,docker-compose.yml中的nginx服务将如下所示:

代码语言:javascript
复制
nginx:
    build: ./nginx/
    container_name: ngx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx:/etc/nginx/conf.d
      - ./app/static:/static
      - ./log/nginx:/var/log/nginx
    depends_on:
      - app
票数 6
EN

Stack Overflow用户

发布于 2019-02-28 16:32:19

除了上面添加音量的注释之外,您还必须调整主要的Nginx配置(最有可能是/etc/nginx/nginx.conf)和/或每个vhost的配置文件。

在大多数情况下,将这些添加到您的主配置中:

代码语言:javascript
复制
http {
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

类似的条目可以是server或location中的palces

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54912615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档