你好,新年快乐!
我还收到非常常见但烦人的错误:“找不到文件”。
现在,我试图尽可能精确,希望有人知道问题所在。我正在尝试做的简短列表:
- Synology NAS 与容器管理器
- 在 /volume1/web 上创建文件夹
- 使用 docker-compose.yml 文件创建项目
这是我的结构:
my_project/
- .docker/
- nginx/
- conf.d/
- default.conf
- Dockerfile
- php/
- Dockerfile
- logs/
- nginx/
- access.log
- error.log
- php/
- php.log
- src/
- public/
- index.html
- index.php
- .env
- docker-compose.yml
这是我的代码:
docker-compose.yml
version: '3.9'
services:
nginx:
container_name: nginx
build:
context: ./.docker/nginx
dockerfile: Dockerfile
ports:
- '8080:80'
- '8443:443'
volumes:
- ./src:/var/www/html
- ./.docker/nginx/conf.d:/etc/nginx/conf.d
- ./logs/nginx:/var/log/nginx
depends_on:
- php
networks:
- internal
php:
container_name: php
build:
context: ./.docker/php
dockerfile: Dockerfile
working_dir: /var/www/html
volumes:
- ./src:/var/www/html
- ./logs/php/php.log:/var/log/fpm-php.www.log
networks:
- internal
networks:
internal:
driver: bridge
默认配置文件
server {
listen 80;
listen [::]:80;
root /var/www/html/public;
index index.html index.htm index.php;
charset utf-8;
location \ {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
try_files $uri =404;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
php/Dockerfile
FROM php:8.3.1-fpm-alpine
nginx/Dockerfile
FROM nginx:1.25.3-alpine
在我的本地 docker 上,它运行完美,没有问题。但是当我尝试在 Synology NAS 上创建项目并想要打开 input.php 时,我收到“文件未找到”的提示,而 html 文件可以正常工作。
到目前为止,我已经尝试了很多解决方案,包括来自这里、stackoverflow 和其他网站、教程等等。这是一个非常常见的问题,我想我找不到一个非常简单的解决方案...
编辑:
我使用了绝对路径而不是相对路径。仍然出现相同的错误。再次更改了文件夹和文件的 chmod。仍然出现相同的错误。
以下是日志:nginx/access.log
172.21.0.1 - - [04/Jan/2024:19:03:00 +0000] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "-"
nginx/error.log->空
在 nginx 容器的卷中添加了一个 error.log: - ./errors:/var/www/errors 有时(并非总是)会发生此错误:
2024/01/04 19:13:48 [info] 31#31: *5 client timed out (110: Operation timed out) while waiting for request, client: 172.21.0.1, server: 0.0.0.0:80
这是我通过“docker ps”得到的:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
986db5183632 paso4-nginx "/docker-entrypoint.…" 22 minutes ago Up 17 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp nginx
cec07fa44c31 paso4-php "docker-php-entrypoi…" 22 minutes ago Up 22 minutes 9000/tcp php
使用 docker container top nginx 获取
UID PID PPID C STIME TTY TIME CMD
root 9420 9398 0 20:27 ? 00:00:00 nginx: master process nginx -g daemon off;
101 9509 9420 0 20:27 ? 00:00:00 nginx: worker process
101 9510 9420 0 20:27 ? 00:00:00 nginx: worker process
101 9511 9420 0 20:27 ? 00:00:00 nginx: worker process
101 9512 9420 0 20:27 ? 00:00:00 nginx: worker process
使用 docker container top php 获取:
UID PID PPID C STIME TTY TIME CMD
root 5658 5636 0 20:01 ? 00:00:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
82 5738 5658 0 20:01 ? 00:00:00 php-fpm: pool www
82 5739 5658 0 20:01 ? 00:00:00 php-fpm: pool www
答案1
尽管我有点尴尬,但我还是想分享解决方案。:-)
- /src 文件夹的用户权限错误。/public 文件夹有 0755,这是正确的,但 /src 没有。
- 当我使用终端(在 Mac 和 Windows 上)修改文件夹(/src 和 /public)的权限时,我 - 这也是让我尴尬的主要原因 - 没有正确连接到 nas。只能作为 nas 的 root 用户,而不是 docker 的 root 用户。
尽管如此还是非常感谢!!!