docker+php+宿主机的nginx,访问异常502

在迁移Docker+PHP服务时,遇到502 Bad Gateway错误。问题包括:nginx配置目录权限问题、数据库导入缺失、PHP监听端口设置。通过修改目录权限、导入数据库、将PHP容器监听端口从127.0.0.1:9000改为0.0.0.0:9000,成功解决502错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一次Docker+PHP迁移而遇到的问题

在一个风和日丽的下午,被告知有个服务器不续费了…………
然后就开始了我为期一周左右的服务迁移。

背景

  • 此文章仅针对一个Docker+php+mysql+宿主机nginx。
  • 使用的PHP的端口通信形式,不是socket
  • 已将域名解析指向使用的服务器。
  • 已将nginx安装,并且测试访问成功,然后将之前的配置文件scp过来,查看配置文件的目录结构,在新机器上配置相同的目录结构。

实验过程

首先,跑的都是小服务,感谢之前的运维大佬,将服务弄成了容器运行,访问的PHP代码是挂载的voulum,我将容器commit打包成镜像,生成镜像包,scp传过去,再载入就好了,然后将迁移机器上的目录结构完全copy过来,启动容器应该就可以了!但是,应该只是应该,就出问题了…………

问题描述

访问域名出现502 Bad Gateway
查看nginx报错:
failed (104: Connection reset by peer) while reading response header from upstream

………… failed (104: Connection reset by peer) while reading response header from upstream …………

容器正常启动,端口也存在,进入容器发现PHP、MySQL正常运行,并没有报错,查看相关error.log也木带问题,巨坑的报错啊!!!

解决过程

  1. 首先观察nginx配置文件指向的根目录,发现目录权限为root
    修改目录权限
chown -R www.www /data/
  1. 发现打包容器之后,并没有将内部安装的mysql数据库数据打包过来,巨坑啊!
    导入数据库,本人启动时候,将宿主机的3307映射到容器的3306
mysql -root  -P3307 -h127.0.0.1 -p'密码' < mysql.sql
  1. 第三点,也是最坑的一点,网页代码就一直不能访问,PHP、mysql、nginx指向的端口本机的9000端口(启动容器时候9000端口映射到此容器)。

    先讲决办法!!!:
    经过自己好久的实验,终于解决问题,将容器的监听端口由127.0.0.1:9000改为0.0.0.0:9000

;listen = 127.0.0.1:9000
listen = 0.0.0.0:9000

测试PHP能否简单访问,
nginx配置文件:

……
root /data/html/test/;
index index.html index.php;
……
location ~ .*\.(php|php5)?$
    {
		fastcgi_pass  127.0.0.1:9000;
……

测试网页:

vim /data/html/index.php

<html>
 <head>
  <title>PHP 测试</title>
 </head>
 <body>
 <?php echo '<p>Hello World,This is a test!</p>'; ?>
 </body>
</html>

访问该nginx域名,显示为:

Hello World,This is a test!

  • 未修改监听ip的时候,显示的还是502错误

最开始走过的艰辛路

刚开始查看nginx错误日志:
failed (104: Connection reset by peer) while reading response header from upstream,
以为是nginx和PHP通信出现了问题,因为是迁移过来的,另一个服务器上能完美运行,这里应是也可以的啊,去网上寻找解决办法,就是需要修改nginx配置文件、PHP配置文件。
修改了nginx的fastcgi的配置、又去容器内部修改了PHP的配置文件php-fpm.conf

pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 15
pm.max_spare_servers = 80
pm.max_requests = 500

我设置了测试网页,访问网页看F12,发现访问解析到了我的服务器,但是访问不到测试的内容,所以nginx应该是没有问题的,果然还是PHP的问题,所以再去查找资料,发现有的大佬说容器内的PHP的监听端口ip有可能会有影响,修改成0.0.0.0之后,就解决了问题。

总结

最无奈的就是错误日志,是有错,但是提示的错误七八成都不能解决问题,还是自己慢慢找,哎,这也是做这个工作的无奈之处吧,但也是积累了很大的经验,共勉学习!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值