PHP-PM容器不响应来自不同Docker容器的请求



我有一个简单的docker-compose设置与nginx代理和一个容器运行PHP-PM:

version: "3.5"
services:
proxy:
image: nginx
depends_on:
- php_pm
php_pm:
build: .

php_pm的Dockerfile从https://github.com/php-pm/php-pm-docker/blob/master/build/Dockerfile-standalone修改为使用PHP 8.1:

FROM composer as composer
ARG version=2.4.0
ARG http_version=dev-master
RUN docker-php-ext-install -j$(nproc) pcntl
RUN mkdir /ppm && cd /ppm && composer require php-pm/php-pm:${version} && composer require php-pm/httpkernel-adapter:${http_version}
FROM php:8.1
RUN apt update && apt install -y git libicu-dev libpng-dev libzip-dev procps xmlsec1 zip zlib1g-dev
RUN docker-php-ext-install -j$(nproc) gd intl mysqli opcache pcntl pdo_mysql zip
EXPOSE 81
COPY --from=composer /ppm /ppm
WORKDIR /var/www
ENTRYPOINT ["/ppm/vendor/bin/ppm", 
"start", 
"--static-directory=public/", 
"--app-env=dev", 
"--port=81", 
"--socket-path=/ppm/run", 
"--pidfile=/ppm/ppm.pid", 
"--debug=1"]

现在,如果我执行到php_pm容器并使用curl localhost:81,我得到PHP-PM的响应(我认为这就是头Server: ReactPHP/1是什么)。

现在我的问题:当我执行到容器proxy,并尝试卷曲php_pm容器我得到这个:

curl php_pm:81
curl: (7) Failed to connect to php_pm port 81: Connection refused

为什么PHP-PM回答端口81当我在php_pm容器内,但不是当我在proxy容器?通常这不是一个问题,例如nginx和另一个运行pm2的容器。PHP-PM没有完全保留由我的docker-compose.yaml文件定义的网络内的端口81吗?

您必须在ENTRYPOINT上设置--host=0.0.0.0,否则容器中的进程将侦听127.0.0.1:81(即:默认为localhost:81),并且只能从同一容器内访问。

ENTRYPOINT ["/ppm/vendor/bin/ppm", 
"start", 
"--static-directory=public/", 
"--app-env=dev", 
"--host=0.0.0.0", 
"--port=81", 
"--socket-path=/ppm/run", 
"--pidfile=/ppm/ppm.pid", 
"--debug=1"]

当你从pph_pm容器内curl它工作,因为你从localhost到达服务器,但curl从另一个容器将不起作用,因为你试图从不同的主机到达服务器。使用0.0.0.0:81将允许您从另一个容器访问服务器。

最新更新