Я создал два пользовательских изображения, одно для 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






Благодаря этому ответу 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 установлен в его конфигурации.
ЕСТЬ ИДЕИ?
Спасибо за @β.εηοιτ.βε и его разъяснения, дополнительную информацию вы можете найти в разделе комментариев;
@β.εηοιτ.βε в /usr/local/etc/php-fpm.d/www.conf Я обнаружил, что они не меняют прослушивание по умолчанию, то есть listen = 127.0.0.1:9000, но не уверен, использует ли изображение эту конфигурацию или другую.
но я думаю, что эти строки в этом файле zz-docker.conf, который включен в путь к файлу конфигурации /usr/local/etc/php-fpm.d, заставляют его работать удаленно, я посмотрю, правильно это или нет ``` echo '[www]'; \ echo 'слушать = 9000'; ```
@β.εηοιτ.βε Да, вы правы, я изменил внутри php:fpm-alpine в zz-docker.conf директиву listen с listen = 9000 на listen = 127.0.0.1:9000 и она перестала работать, я запутался, потому что думал, что конфиг будет просто в www.conf, но я ошибся, спасибо за помощь;
Я не вижу
listen = 127.0.0.1:9000на изображенииphp:fpm-alpine; с чего ты взял, что там такая конфигурация? Имейте в виду, что при установке пакета могут присутствовать некоторые файлы конфигурации, которых может не быть при установке в контейнере, где они, скорее всего, скомпилированы из исходных кодов. Для справки: github.com/docker-library/php/blob/master/8.3/alpine3.19/fpm/…