was*_*ner 8 nginx docker docker-compose
目前我的 docker 容器正在将 nginx 访问日志打印到 /dev/stdout。如何在我的 docker 容器内创建一个卷来存储访问日志?
我的 Dockerfile:
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}
Run Code Online (Sandbox Code Playgroud)
我的 docker-compose.yml:
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
Run Code Online (Sandbox Code Playgroud)
我的 nginx/default.conf:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试向此应用程序添加 fail2ban 和 fluentd 日志记录,但首先我需要存储可用于其他日志记录目的的物理文件(不是 /dev/stout)。
谢谢!
小智 5
默认情况下,Nginx 容器将访问日志转发到 STDOUT,将错误日志转发到 STDERR。您可以在 nginx Dockerfile 中看到这些行:
# 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 \
Run Code Online (Sandbox Code Playgroud)
所以可以在容器日志中看到nginx日志:
docker logs -f ngx
Run Code Online (Sandbox Code Playgroud)
但是如果你想将 nginx 日志存储在一个 docker 卷中,首先创建你自定义的 nginx docker 镜像:
FROM nginx
RUN rm /var/logs/nginx/*
Run Code Online (Sandbox Code Playgroud)
然后你在 docker-compose.yml 中的 nginx 服务会是这样的:
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
Run Code Online (Sandbox Code Playgroud)
小智 4
除了上面添加卷的注释之外,您还必须调整主 Nginx 配置(最有可能/etc/nginx/nginx.conf)和/或每个虚拟主机的配置文件。
在大多数情况下,将这些添加到您的主要配置中:
http {
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
Run Code Online (Sandbox Code Playgroud)
类似的条目可能位于内部server或location
| 归档时间: |
|
| 查看次数: |
7791 次 |
| 最近记录: |