PHP-PM容器无法被同Docker Compose中其他容器访问的问题
问题解决:PHP-PM容器内部可访问,但Nginx代理容器无法连接
核心原因
PHP-PM默认仅绑定127.0.0.1(回环地址),这意味着服务仅在容器内部的回环接口监听请求。Docker Compose中不同容器属于同一网桥网络,它们需要通过容器的对外网络接口(对应0.0.0.0)才能互相访问,而你的PHP-PM配置未开放该访问权限。
解决方案
修改php_pm容器的Dockerfile,在ENTRYPOINT的PHP-PM启动命令中添加--host=0.0.0.0参数,让服务绑定所有可用网络接口:
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"]
重新构建并启动容器:
docker-compose build php_pm docker-compose up -d
验证方法
进入proxy容器再次测试:
curl php_pm:81
此时即可正常获取PHP-PM的响应。
补充说明
EXPOSE 81只是Docker的端口声明,不会实际修改服务的绑定地址,必须通过服务自身配置(此处为PHP-PM的--host参数)开放对外访问。depends_on仅保证proxy容器在php_pm容器之后启动,但不会等待PHP-PM服务完全就绪。若遇到连接超时(而非连接拒绝),可添加健康检查确保服务就绪后再启动proxy。
内容的提问来源于stack exchange,提问作者tobias47n9e
相关产品推荐
相关产品推荐

