Nginx、PHP-FPM、Docker - 113:主机无法访问
我很难理解我的错误在哪里。我查看了各种答案并尝试了补救措施,但发现他们的解决方案并没有解决我的问题。我把一切都精简到最基础的部分,看看是否能得到一个基本的 PHP index.php 来呈现它自己。
这是我试图在核心上完成的任务:
我使用 docker-compose 建立了 1 个网络,并将 2 个服务连接到该网络。一个服务是 PHP-FPM,另一个是为 PHP-FPM 服务的 nginx。每次我站起来时,无论我如何配置它,我都只会收到
502 Bad Gateway
,当我检查 nginx 容器日志时,我收到
[error] 29#29: *1 connect() failed (113: Host is unreachable) while connecting to upperleft
.
./docker-compose.yml
version: "3.7"
networks:
app:
driver: bridge
services:
php:
image: php:7.4-fpm
container_name: php
volumes:
- /home/admin/dev/test/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
- /home/admin/dev/test/src/:/var/www/html
networks:
- app
nginx:
image: nginx:alpine
container_name: nginx
depends_on:
- php
ports:
- "80:80"
- "443:443"
volumes:
- /home/admin/dev/test/src/:/usr/share/nginx/html
- /home/admin/dev/test/nginx/conf.d/app.conf:/etc/nginx/conf.d/app.conf
networks:
- app
./php/www.conf -> /usr/local/etc/php-fpm.d/www.conf
[www]
user = www-data
group = www-data
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
./nginx/conf.d/app.conf -> /etc/nginx/conf.d/app.conf
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
./src/index.php -> (php) /var/www/html && (nginx) /usr/share/nginx/html (仅供参考)
<?php
phpinfo();
Docker:
Docker 版本 19.03.12,内部版本 48a66213fe
Docker-compose:
docker-compose 版本 1.25.4,内部版本未知
环境:
Linux localhost.localdomain 5.7.14-200.fc32.x86_64 #1 SMP Fri Aug 7 23:16:37 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
(Fedora 32 Workstation)
我相信我只是对 PHP-FPM 存在重大误解,但也许还有其他原因。
更新期间故障排除 我突然想到,我的整体环境(即 Fedora 32)搞砸了。Fedora 32 不支持 Docker 的开箱即用(必须更改 /etc/yum.repos.d 中的 repo 设置才能使其工作 - 必须使用 Fedora 31 的 repo)。所以我决定启动一个 Ubuntu 20.0.4 VM 并在那里进行测试。现在 PHP-FPM 和 Nginx 正在通信;我从 PHP-FPM 容器中获得了响应!但是,现在即使只使用基本脚本,我也会收到 404 错误,但这更接近我需要的位置……现在要修复 404。
确切的错误是:
[error] 30#30:*1 FastCGI 在 stderr 中发送:“主脚本未知”,同时从上游读取响应标头
最终更新(答案) 对于遇到此问题的任何人来说,截至今天,Docker 无法与 Fedora 32 配合使用(某些部分可以)。至少在我有时间进行故障排除/修补的情况下无法使用。这是一个全新的 Fedora 32,没有安装以前的 docker/docker-compose 或任何东西。
我启动了全新的 Fedora 31 和 Ubuntu 20.0.4,只是为了验证我的“结论”。两者开箱即用,无需额外调整。
您能检查一下您的 php-fpm 服务是否正在运行吗? 问题可能是 php-fpm 服务未运行,因此 nginx 无法连接到它