php - Nginx + PHP-FPM:PHP-FPM 容器的 5000 端口连接被拒绝,而 9000 端口没有问题
问题描述
我在 Docker 中训练自己,我正在尝试设置一个 Nginx + PHP FPM 环境,我最终想在 ECS 上托管(仅用于培训目的)。PHP 环境运行了一个基本的 Symfony 4 服务(只是返回一个 json,没什么特别的)。然而,问题在于我的 Nginx 容器。发生了一些非常奇怪的事情,因为我在我的 Dockerfile 中暴露了 PHP 容器上的端口 5000,但是我的 Nginx 容器在尝试访问此端口的 PHP 容器时给了我错误的网关错误。如果我将 Nginx 容器用于 fastcgi_pass 的端口更改为 9000,而不更改 PHP 容器的公开端口(在 Dockerfile 中将其保留为 5000),一切都很好,并且设置正常。有没有人可以给我一些提示,为什么会这样?
我docker ps
检查了端口,确实端口 5000 和 9000 在 PHP 容器上都是打开的,但似乎只有端口 9000 可用。
Nginx 配置文件
server {
listen 80;
server_name localhost;
root /var/www/symfony/public;
index index.php;
access_log /var/log/access.log;
error_log /var/log/error.log;
location ~ \.php$ {
include fastcgi_params;
fastcgi_param HTTPS off;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass symfony:9000;
fastcgi_index index.php;
}
}
Symfony dockerfile (shortenend)
FROM php:7.2-fpm
WORKDIR /var/www/symfony
... (installation things)
COPY . /var/www/symfony
EXPOSE 5000
码头工人组成
version: "3.7"
services:
symfony:
container_name: symfony
build: ./symfony
volumes:
- ./symfony:/var/www/symfony
- ./logs/symfony:/var/www/symfony/var/logs
networks:
- api
nginx:
container_name: nginx
build: ./nginx
ports:
- 80:80
volumes:
- ./symfony:/var/www/symfony
- ./logs/nginx:/var/log/nginx
networks:
- api
depends_on:
- symfony
volumes:
symfony:
networks:
api:
driver: "bridge"
Docker ps 结果
PORTS NAMES
0.0.0.0:80->80/tcp nginx
5000/tcp, 9000/tcp symfony
我希望能够将 symfony:9000 更改为 symfony:5000 并能够从 PHP 容器中获取结果。
解决方案
推荐阅读
- scala - 带过滤器的 HBASE SPARK 查询不加载所有 hbase
- java - 当泛型类型具有继承结构时,如何在 Mapstruct 中映射集合?
- android - Android 网络服务发现获取主机名 (mDNS/Zeroconf)
- avfoundation - CVMetalTextureCacheCreate & 三重缓冲
- hive - Nifi PutHive3Streaming - 写入分区表
- c# - 如何访问任务中的类方法?
- scala - ARIMA 与 Spark 的优势
- python-3.x - 更改从 print() 打印日期时间对象的方式?
- sql - DB2 SQL 将 IF ELSE 条件视为 DDL 语句?
- python - 如何测试两个熊猫分类系列是否仅在类别标签上有所不同