docker nginx访问日志权限被拒绝

时间:2018-10-11 09:05:02

标签: docker

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

  

[暴击] 7#7:* 16 open()“ /var/log/nginx/access_2018-10-11.log”失败   (13:权限被拒绝)在记录请求时,

如果我将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;

...
}

1 个答案:

答案 0 :(得分:0)

如我所见,您可以:

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

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

  • 或者您可以放弃直接将日志记录到平面文件的想法,让nginx容器像default一样将日志文件重新路由到stdoutstderr并捕获通过docker logs工具从主机/ debug / monitor / write-to-file到他们