【发布时间】:2020-08-15 02:28:25
【问题描述】:
我很难理解我的错误在哪里。我查看了各种答案并尝试了补救措施,却发现他们的解决方案并没有解决我的问题。我已经将所有内容都简化为非常基础的内容,看看我是否可以让一个基本的 PHP index.php 来展示自己。
这是我要在核心上完成的任务:
我有 docker-compose 支持 1 个网络和 2 个连接到网络的服务。一种服务是 PHP-FPM,另一种是 nginx 服务 PHP-FPM。每次我站起来,无论我如何配置它,我都会得到一个502 Bad Gateway,当我检查 nginx 容器日志时,我会得到[error] 29#29: *1 connect() failed (113: Host is unreachable) while connecting to upstream。
./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 version 19.03.12, build 48a66213fe
码头工人撰写:docker-compose version 1.25.4, build unknown
环境: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 工作站)
我相信我只是对 PHP-FPM 有一个严重的误解,但也许还有其他的。
故障排除期间更新 我的想法是我的整体环境(即 Fedora 32)搞砸了。 Docker 不支持开箱即用的 Fedora 32(必须更改 /etc/yum.repos.d 中的存储库设置才能使其工作 - 必须使用 Fedora 31 的存储库)。所以我决定启动一个 Ubuntu 20.0.4 虚拟机并在那里进行测试。现在 PHP-FPM 和 Nginx 正在讨论;我从 PHP-FPM 容器中得到响应!但是,现在即使只有基本脚本,我也会遇到 404 错误,但这离我需要的地方更近了……现在修复 404。
确切的错误是:[error] 30#30: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
【问题讨论】:
-
php容器不应该暴露9000端口吗?
-
它不必在服务定义中明确显示,因为图像是在 Dockerfile 中构建的(检查 php:7.4-fpm 图像)。