【问题标题】:Nginx, PHP-FPM, Docker - 113: Host is unreachableNginx、PHP-FPM、Docker - 113:主机无法访问
【发布时间】: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 图像)。

标签: php docker nginx fastcgi


【解决方案1】:

最终更新(答案) 对于遇到此问题的任何人,截至今天,Docker 无法与 Fedora 32 一起使用(某些部分可以)。至少在我有时间进行故障排除/修补时没有。这是一个全新的 Fedora 32,之前没有安装 docker/docker-compose 或任何东西。

我安装了一个新的 Fedora 31 和 Ubuntu 20.0.4 只是为了验证我的“结论”。两者都开箱即用,无需额外调整。

【讨论】:

    【解决方案2】:

    你能检查你的 php-fpm 服务是否正在运行吗? 问题可能是 php-fpm 服务没有运行,因此 nginx 无法连接到它

    【讨论】:

    • 是的,当我检查 docker-compose logs php 时它正在运行,我看到 php-fpm 正在 pid 1 上运行,应该是这样。
    • 为了完整起见,这里是输出:[14-Aug-2020 12:35:38] NOTICE: fpm is running, pid 1 [14-Aug-2020 12:35:38] NOTICE: ready to handle connections
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多