我正在尝试将我的个人开发设置从本地 php/nginx 设置转换为 docker 设置。几乎所有东西都运行良好,我现在遇到的唯一问题是所有静态内容(*.css/*.js/*.jpg etc
)都响应 403 禁止。我整天都在浏览和尝试互联网解决方案,但似乎都不起作用。大多数发现的问题都有答案,即容器用户应设置为另一个用户(在我的情况下为 uid 1000)。这样做会导致 nginx 容器启动时出现权限被拒绝 13 错误。
希望这里有人有解决方案,以便我可以完成我的新本地设置。
主持人:Linux 操作系统 (popOS)
使用的容器:
- NGINX-nginx:最新
- PHP-php:8.2-fpm
对于这两个容器,我创建了一个dockerfile。
访问 localhost 页面时,除本地静态文件外,其他所有内容均可正常工作。因此 localhost:3030 会加载 index.php 文件等。仅当尝试访问例如 localhost:3030/dist/images/test.png 时,我才会收到禁止错误。
现在我认为这意味着 nginx 无法访问这些文件。我只是不知道如何授予此访问权限。因为这是一个本地开发环境,所以我不会复制容器中的所有文件,而只会使用 docker-compose.yml 中与项目文件夹的卷绑定以及 php 容器中的相同卷绑定。
我希望我忽略了一些愚蠢的事情,因为感觉这应该是有效的。
项目文件示例:
/public/
/public/index.php
/public/dist/
/public/dist/images/test.png
Docker 文件:
以下是此时docker文件的设置。
docker-compose.yml:
version: '3.7'
services:
ngnx:
build: ./nginx/
container_name: nginx-container
restart: unless-stopped
links:
- php
volumes:
- ./www/html/:/var/www/html/
- ./www/logs/:/var/log/nginx/
php:
build: ./php/
container_name: php-container
restart: unless-stopped
expose:
- 9000
volumes:
- ./www/html/:/var/www/html/
./nginx/Dockerfile
FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
./php/Dockerfile
FROM php:8.2-fpm
RUN apt-get update -y && apt-get upgrade -y
./nginx/default.conf
非常基本的 nginx 文件,因为在开始调整之前我首先想要一个完全正常工作的环境。
server {
listen 80 default_server;
root /var/www/html/public;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
access_log /var/log/nginx/error.log;
error_log /var/log/nginx/error.log error;
sendfile off;
client_max_body_size 100m;
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php-container:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
}