Подключите контейнер Nginx к пользовательскому контейнеру PHP-FPM

Я создал два пользовательских изображения, одно для Nginx, другое для Php-fpm на основе alpine, создал их контейнеры, но по какой-то причине Nginx выдает мне 502 Bad Gateway при попытке обслужить php-файл и следующую ошибку:

/var/log/nginx/error.log :

2024/04/16 15:28:29 [error] 25#25: *16 connect() failed (111: Connection refused) while connecting to upstream, client: 172.30.0.1, server: , request: "GET / HTTP/1.1", upstream: "fastcgi://172.30.0.3:9000", host: "localhost:8000"

но когда я работаю с php:fpm-alpine изображением из Docker Hub, оно работает отлично. Ниже вы найдете композицию докера, которая содержит как изображение Docker Hub, так и мое собственное изображение, а затем замените в файле Nginx default.conffastcgi_pass my-php-fpm:9000; на fastcgi_pass php-fpm:9000; для проверки. оба из них.

не забудьте запустить nginx -s reload или перезапустить контейнер nginx после изменения файла конфигурации.

Я не знаю, в чем проблема, все контейнеры используют один и тот же том и одну и ту же сеть.

Докер-файл Nginx:


FROM alpine:3.19

RUN apk upgrade && apk update
RUN apk add nginx && apk add openssl

RUN mkdir /var/www/html

COPY ./default.conf /etc/nginx/http.d/

CMD nginx -g "daemon off;"

EXPOSE 80

по умолчанию.conf:


server {
    listen 80;

    root /var/www/html;

    index index.php index.html;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;

        try_files $uri =404;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

}

my-php-Fpm Dockerfile:

FROM alpine:3.19

RUN apk upgrade && apk update
RUN apk add curl php83 php83-phar php83-fpm
RUN mkdir -p /var/www/html/

CMD php-fpm83 -F

EXPOSE 9000


docker-compose.yml:

version: "3.8"

services:
  nginx:
    image: my-nginx
    build:
      context: ./nginx/
    container_name: nginx
    ports:
      - 8000:80
    networks:
      - net
    volumes:
      - ./index.php:/var/www/html/index.php

  php-fpm:
    image: php:fpm-alpine
    container_name: php-fpm
    ports:
      - 9000
    networks:
      - net
    volumes:
      - ./index.php:/var/www/html/index.php

  my-php-fpm:
    image: my-php-fpm
    build:
      context: ./my-php-fpm/
    container_name: my-php-fpm
    ports:
      - 9000
    networks:
      - net
    volumes:
      - ./index.php:/var/www/html/index.php

networks:
  net:

индекс.php:

<?php echo phpinfo();?>

Структура каталогов:

test
├── docker-compose.yml
├── index.php
├── my-php-fpm
│   └── Dockerfile
└── nginx
    ├── Dockerfile
    └── default.conf
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
127
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря этому ответу StackOverflow, который я нашел, я смог заставить свой собственный php-fpm контейнер работать как положено.

поскольку я использую php-fpm82, я нашел его конфигурацию по этому пути /etc/php82/php-fpm.d/www.conf Мне пришлось искать

listen = 127.0.0.1:9000

и измените его на

listen = 0.0.0.0:9000

перезапустил контейнер, и страница php index.php отобразилась так, как должна, но я не понимаю, почему образ DockerHub php:fpm-alpine хорошо работает с моим Nginx контейнером, даже если listen = 127.0.0.1:9000 установлен в его конфигурации.

ЕСТЬ ИДЕИ?

Спасибо за @β.εηοιτ.βε и его разъяснения, дополнительную информацию вы можете найти в разделе комментариев;

Я не вижу listen = 127.0.0.1:9000 на изображении php:fpm-alpine; с чего ты взял, что там такая конфигурация? Имейте в виду, что при установке пакета могут присутствовать некоторые файлы конфигурации, которых может не быть при установке в контейнере, где они, скорее всего, скомпилированы из исходных кодов. Для справки: github.com/docker-library/php/blob/master/8.3/alpine3.19/fpm‌​/…

β.εηοιτ.βε 16.04.2024 21:24

@β.εηοιτ.βε в /usr/local/etc/php-fpm.d/www.conf Я обнаружил, что они не меняют прослушивание по умолчанию, то есть listen = 127.0.0.1:9000, но не уверен, использует ли изображение эту конфигурацию или другую.

Holy semicolon 16.04.2024 22:16

но я думаю, что эти строки в этом файле zz-docker.conf, который включен в путь к файлу конфигурации /usr/local/etc/php-fpm.d, заставляют его работать удаленно, я посмотрю, правильно это или нет ``` echo '[www]'; \ echo 'слушать = 9000'; ```

Holy semicolon 16.04.2024 22:24

@β.εηοιτ.βε Да, вы правы, я изменил внутри php:fpm-alpine в zz-docker.conf директиву listen с listen = 9000 на listen = 127.0.0.1:9000 и она перестала работать, я запутался, потому что думал, что конфиг будет просто в www.conf, но я ошибся, спасибо за помощь;

Holy semicolon 16.04.2024 22:43

Другие вопросы по теме