Docker环境下修改Nginx默认日志路径报错求助
问题解决:Docker Compose中Nginx日志路径找不到的问题
问题根源
- 你在PHP-FPM容器(
app服务)的Dockerfile里创建了日志目录,但Nginx容器是独立实例,根本访问不到另一个容器里的文件路径。 - 你把宿主机的
../src挂载到了两个容器的/var/www/FPM目录,这会直接覆盖容器内原本创建的log文件夹——因为宿主机的../src里大概率没有这个目录。
解决方案一:宿主机挂载日志目录(推荐,方便本地查看日志)
1. 宿主机创建日志目录
在项目根目录(和src文件夹同级)执行命令:
mkdir -p ../log/nginx
2. 修改docker-compose.yml,给Nginx和PHP-FPM挂载日志目录
version: "3.8" services: app: build: context: ./ dockerfile: Dockerfile container_name: FPM-app restart: always working_dir: /var/www/FPM volumes: - ../src:/var/www/FPM # 让PHP-FPM也能访问日志目录(如果不需要可以删掉这行) - ../log/nginx:/var/www/FPM/log/nginx nginx: image: nginx:1.23.1-alpine container_name: FPM-nginx restart: always ports: - 8000:80 volumes: - ../src:/var/www/FPM - ./nginx:/etc/nginx/conf.d # 关键:把宿主机日志目录映射到Nginx容器内的目标路径 - ../log/nginx:/var/www/FPM/log/nginx
3. 简化Dockerfile,删掉无用的目录创建命令
因为现在用宿主机目录挂载,容器启动时会自动识别路径,不需要在镜像里提前创建:
FROM php:8.0.2-fpm RUN apt-get update && apt-get install -y \ git \ curl \ zip \ unzip WORKDIR /var/www/FPM
4. 重启服务生效
docker compose down docker compose up --build
解决方案二:使用Nginx容器自带的日志目录(无需宿主机挂载)
如果不需要把日志存在本地,直接用Nginx默认的日志目录即可:
1. 修改nginx.conf里的日志路径
server { listen 80; index index.php; root /var/www/FPM/public; # 改成Nginx容器默认的日志目录(容器内已存在) error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; error_page 404 /index.php; location ~ \.php$ { try_files $uri =404; fastcgi_pass app:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location / { try_files $uri $uri/ /index.php?$query_string; gzip_static on; } }
2. 直接重启服务
不需要修改其他配置,执行docker compose restart即可。查看日志可以用命令:
docker logs FPM-nginx # 或者进入容器查看 docker exec -it FPM-nginx cat /var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者swlok
相关产品推荐
相关产品推荐

