我想用/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;
...
}
答案 0 :(得分:0)
如我所见,您可以:
要么检测用户nginx的UID(GUID)是否以default nginx
运行,并且仅允许该用户或组访问该目录。
通常,所有者将是来自主机的用户,而组所有者将被从来宾映射到GUID。这样,对所涉及目录的访问级别770就足够了。
或者您可以放弃直接将日志记录到平面文件的想法,让nginx容器像default一样将日志文件重新路由到stdout
和stderr
并捕获通过docker logs工具从主机/ debug / monitor / write-to-file到他们