Подключение PHP-FPM к Nginx в Docker Compose

Я возился с Docker, пытаясь настроить композицию Docker с Nginx и PHP-FPM, работающими в отдельных контейнерах Alpine. Мои настройки доступны на GitHub по адресу https://github.com/sparkbuzz/lemp_docker, мой docker-compose.yml выглядит следующим образом:

version: '3'
services:
  alpine_nginx:
    build: ./nginx
    container_name: alpine_nginx
    links:
      - alpine_php
    ports:
      - "80:80"

  alpine_php:
    build: ./php
    container_name: alpine_php
    ports:
      - "9000:9000"

Я могу успешно создавать изображения, и когда я захожу на локальный хост в своем браузере, я вижу index.html, обслуживаемый Nginx. Однако при попытке получить доступ к phpinfo.php я получаю сообщение об ошибке 502 — Bad Gateway.

Я могу docker exec -it ... /bin/ash войти в оба запущенных экземпляра, и кажется, что службы работают успешно, однако ясно, что PHP-FPM на порту 9000 даже не срабатывает.

Вот некоторые отзывы с моей консоли:

Recreating alpine_php ...
Recreating alpine_php ... done
Recreating alpine_nginx ...
Recreating alpine_nginx ... done
Attaching to alpine_php, alpine_nginx
alpine_php      | [06-Nov-2017 21:46:39] NOTICE: fpm is running, pid 1
alpine_php      | [06-Nov-2017 21:46:39] NOTICE: ready to handle connections
alpine_nginx    | 2017/11/06 21:46:46 [error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.20.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://172.20.0.2:9000", host: "localhost"
alpine_nginx    | 172.20.0.1 - - [06/Nov/2017:21:46:46 +0000] "GET /index.php HTTP/1.1" 502 568 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36" "-"```

Я так близок, но не уверен, почему Nginx не устраивает восходящий поток PHP. Конфигурация Nginx выглядит следующим образом:

server {
  listen 80;
  server_name localhost;

  location / {
    root /var/www/localhost/htdocs/;
    index index.html;
  }

  location ~* \.php$ {
    fastcgi_index index.php;
    fastcgi_pass alpine_php:9000;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
  }
}

Как заставить Nginx общаться с PHP FPM?


person josef.van.niekerk    schedule 06.11.2017    source источник
comment
как выглядит ваша восходящая конфигурация?   -  person miknik    schedule 07.11.2017


Ответы (1)


Вы слушаете 127.0.0.1 в своей конфигурации php-fpm.

Добавьте это к php/Dockerfile

RUN sed -i 's/127.0.0.1:9000/0.0.0.0:9000/g' /etc/php7/php-fpm.d/www.conf
person nuster cache server    schedule 07.11.2017
comment
Вау, это исправлено, мне нужно сделать домашнее задание на 127.0.0.1 и 0.0.0.0, так как я думал, что они одинаковы. Спасибо за ваш ответ @nuster - person josef.van.niekerk; 07.11.2017
comment
@josef.van.niekerk 0.0.0.0 означает прослушивание подключений отовсюду, 127.0.0.1 означает прослушивание подключений из обратной петли (та же машина) - person Xymanek; 07.11.2017