Nginx,PHP-FPM,Docker - 113:主机不可访问
Nginx, PHP-FPM, Docker - 113: Host is unreachable
我很难理解我的错误在哪里。我查看了各种答案并尝试了补救措施,却发现他们的解决方案并没有解决我的问题。我已经把所有东西都剥离到非常基础的东西,看看我是否可以得到一个基本的 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。配置文件
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 version 19.03.12, build 48a66213fe
Docker-撰写: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 VM 并在那里进行测试。现在 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-fpm 服务是否是 运行 吗?
问题可能是 php-fpm 服务不是 运行 因此 nginx 无法连接到它
最终更新(答案)
对于遇到此问题的任何人,截至今天,Docker 无法与 Fedora 32 一起使用(某些部分可以)。至少在我 troubleshoot/patch 可用的时间里不会。这是一个全新的 Fedora 32,之前没有安装任何 docker/docker-compose 或任何东西。
我站了一个新的Fedora 31和Ubuntu 20.0.4来验证我的“结论”。两者都开箱即用,无需额外调整。
我很难理解我的错误在哪里。我查看了各种答案并尝试了补救措施,却发现他们的解决方案并没有解决我的问题。我已经把所有东西都剥离到非常基础的东西,看看我是否可以得到一个基本的 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。配置文件
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 version 19.03.12, build 48a66213fe
Docker-撰写: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 VM 并在那里进行测试。现在 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-fpm 服务是否是 运行 吗? 问题可能是 php-fpm 服务不是 运行 因此 nginx 无法连接到它
最终更新(答案) 对于遇到此问题的任何人,截至今天,Docker 无法与 Fedora 32 一起使用(某些部分可以)。至少在我 troubleshoot/patch 可用的时间里不会。这是一个全新的 Fedora 32,之前没有安装任何 docker/docker-compose 或任何东西。
我站了一个新的Fedora 31和Ubuntu 20.0.4来验证我的“结论”。两者都开箱即用,无需额外调整。