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;
我正在尝试 运行 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;