Docker-编写 NGINX 和 PHP - 可以服务器 html 文件但 php 提供错误的网关

Docker-Compose NGINX and PHP - Can server html files but php gives bad gateway

我正在尝试 运行 nginx 和 php docker-compose。我能够构建容器,当我在浏览器中浏览到 html 文件时,nginx 会为它提供服务。但是当我尝试浏览 php 文件时,我只得到 502 Bad Gateway.

我知道这可能与我的 nginx 配置文件中的服务器名称有关,因为我从中获得的教程提到这需要正确。但我已经尝试将其更改为 'localhost' 和 'ip-of-my-dockerhost',结果相同。

我也知道我应该查看日志文件。不过我有点linux新手。当我打开 Portainer 时,转到名为 Web 的容器并执行 shell,如果我执行:

cd /var/log/nginx ; ls

我看到两个文件 access.log 和 error.log

但是如果我输入

cat error.log

没有任何反应!我得到一个新的空白行,其中有一个闪烁的光标,它从不输出任何东西。 shell 然后是 'frozen',直到我按 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;
    }
}

9090 是一个暴露的端口。这意味着您可以到达 localhost:9090 用于 PHP 容器,但不能用于内部容器通信。

改变你的site.conf:

fastcgi_passphp:9090; => fastcgi_pass php:9000;