【问题标题】:docker nginx access log permission denieddocker nginx 访问日志权限被拒绝
【发布时间】:2019-03-16 07:26:36
【问题描述】:

我想用/var/log/nginx 创建卷。我收到此错误消息。

[crit] 7#7: *16 open() "/var/log/nginx/access_2018-10-11.log" 失败 (13: Permission denied) 记录请求时,

如果我将 nginx/log 权限修改为 777,那就可以了。但我认为这不是一个好的解决方案。我该如何解决?谢谢你的帮助。

docker-compose.yml

version: '2'
services:
    nginx:
        build: ./nginx/
        volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d
          - ./nginx/log:/var/log/nginx
        links:
          - php
        ports:
          - 9999:80
        restart: always
...

Dockerfile

FROM nginx:1.13.3

RUN apt-get update && apt-get install -y vim

ADD ./nginx.conf /etc/nginx/nginx.conf

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;

...

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';


    map $time_iso8601 $logdate {
        '~^(?<ymd>\d{4}-\d{2}-\d{2})'   $ymd;
        default                         'nodate';
    }

    access_log '/var/log/nginx/access_${logdate}.log' main;

...
}

【问题讨论】:

标签: docker


【解决方案1】:

如我所见,你可以:

  • 要么检测用户 nginx 的 UID (GUID) 以 (nginx by default) 运行,并只允许用户或组访问目录。

    通常所有者是来自主机的用户,而组所有者将映射到来自来宾的 GUID。那么770的访问级别对于所涉及的目录就足够了。

  • 或者你可以放弃直接记录到平面文件的想法,让 nginx 容器将日志文件重新路由到 stdoutstderr,就像 default 和 capture/debug/monitor/write 所做的那样-通过docker logs设施从主机归档它们

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2014-08-10
    • 2018-12-15
    • 2023-03-22
    • 2020-08-25
    相关资源
    最近更新 更多