在Docker Compose中连接PHP-FPM和Nginx

在Docker Compose中连接PHP-FPM和Nginx,php,docker,nginx,docker-compose,alpine,Php,Docker,Nginx,Docker Compose,Alpine,我正在摆弄Docker,试图用Nginx和PHP-FPM在单独的Alpine容器上运行来设置Docker组合。我的设置可在GitHub上获得,我的docker compose.yml如下所示: version: '3' services: alpine_nginx: build: ./nginx container_name: alpine_nginx links: - alpine_php ports: - "80:80" al

我正在摆弄Docker,试图用Nginx和PHP-FPM在单独的Alpine容器上运行来设置Docker组合。我的设置可在GitHub上获得,我的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"
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;
  }
}
我能够成功地构建图像,当我在浏览器中访问localhost时,我可以看到Nginx提供的index.html。然而,当尝试访问phpinfo.php时,我得到一个502-坏网关错误

我可以
docker exec-it/bin/ash
进入这两个正在运行的实例,看起来服务正在愉快地运行,但是,很明显,端口9000上的PHP-FPM从未被击中

以下是来自我的控制台的一些反馈:

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配置如下:

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"
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对话?

您正在PHP-FPM配置中收听
127.0.0.1

将此添加到
php/Dockerfile

RUN sed -i 's/127.0.0.1:9000/0.0.0.0:9000/g' /etc/php7/php-fpm.d/www.conf

你的上游配置是什么样子的?哇,这解决了它,我需要在127.0.0.1和0.0.0.0上做一些功课,因为我认为它们是一样的。谢谢你的回答@nuster@josef.van.niekerk
0.0.0.0
表示侦听来自任何地方的连接,
127.0.0.1
表示侦听来自环回的连接(同一台机器)