Docker-Compose NGINX и PHP — могут серверировать html-файлы, но php дает плохой шлюз

Я пытаюсь запустить nginx и php в docker-compose. Я могу создавать контейнеры, и когда я просматриваю html-файл в своем браузере, nginx обслуживает его. Но когда я пытаюсь просмотреть файл php, я просто получаю 502 Bad Gateway.

Я знаю, что это может быть как-то связано с именем сервера в моем файле конфигурации nginx, поскольку в учебнике, из которого я его получил, упоминается, что это должно быть правильно. Но я попытался изменить его на «localhost» и «ip-of-my-dockerhost» с тем же результатом.

Я также знаю, что я должен смотреть на файлы журнала. Однако я немного новичок в Linux. Когда я открываю Portainer, иду в контейнер под названием Web и запускаю оболочку, если я иду:

cd /var/log/nginx ; ls

Я вижу два файла с именами access.log и error.log.

однако, если я наберу

cat error.log

Ничего не произошло! Я получаю новую пустую строку с мигающим курсором, который никогда ничего не выводит. Затем оболочка «замораживается», пока я не нажму CTRL-C, чтобы завершить задачу.

Содержимое docker-compose.yml

version: "3.7"

#############################
#
# NETWORKS
#
#############################
networks:
  main:
    external:
      name: main
  default:
    driver: bridge

########################### 
#
#  SERVICES
#
###########################
services:
# All services / apps go below this line

  portainer:
    container_name: Portainer
    image: portainer/portainer:latest
    restart: unless-stopped
    command: -H unix:///var/run/docker.sock
    networks:
      - main
    ports:
      - "$PORTAINER_PORT:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - $DATADIR/portainer:/data # Change to local directory if you want to save/transfer config locally
    environment:
      - TZ=$TZ

<<snip as don't believe relevant - a bunch of other containers here such as influxdb, radarr etc>>

  web:
    container_name: Web
    image: nginx:latest
    networks:
      - main    
    ports:
      - 81:80
    environment:
      - PUID=$PUID
      - PGID=$PGID 
    volumes:
      - $CONFIGDIR/nginx/site.conf:/etc/nginx/conf.d/default.conf
      - $DATADIR/nginx/code:/code
      
  php:
    container_name: php
    image: php:7-fpm
    networks:
      - main    
    ports:
      - 9090:9000
    environment:
      - PUID=$PUID
      - PGID=$PGID
    volumes:
      - $CONFIGDIR/nginx/site.conf:/etc/nginx/conf.d/default.conf
      - $DATADIR/nginx/code:/code

содержимое $CONFIGDIR/nginx/site.conf

server {
    index index.php index.html;
    server_name 192.168.1.7;  ## This is the IP address of my docker host but I've also tried 'localhost' and 'php-docker.local'
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /code;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9090;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

Стоит ли изучать 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 и хотите разрабатывать...
0
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

9090 - открытый порт. Это означает, что вы можете связаться с localhost:9090 для контейнера PHP, но не для внутренней связи контейнера.

Измените свой site.conf:

fastcgi_pass PHP: 9090; => fastcgi_pass php:9000;

Боже мой спасибо большое. Это сводило меня с ума уже около 24 часов, теперь ты мой герой <3

Matthew Winter 11.05.2022 18:50

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