Alibaba Cloud Linux 3 +Docker 部署 ThinkPHP6 (宝塔环境)-问题篇
上篇文章介绍了具体的操作步骤,这里总结记录一下部署过程中遇到的问题:
这里注明一下,所有操作容器的命令要在项目目录(tp6)下运行,目录结构如下图:
宿主机(安装宝塔面板)
├─ /www/wwwroot/tp6 (项目目录)
├─app
├─config
├─public
├─vender
... ...
├─think
├─Dockerfile
├─docker-composer.yml
一、Nginx 报 “502 Bad Gateway”
步骤1:检查 PHP-FPM 是否正常运行并监听 9003 端口
首先需要找到运行 PHP-FPM 的容器,并确认其内部端口:
执行命令:
#列出所有运行中的容器
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker ps
#输出结果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7205b7c455d3 tp6-tp6-php-fpm "docker-php-entrypoi…" 7 hours ago Up 7 hours 9000/tcp, 0.0.0.0:9003->9003/tcp, :::9003->9003/tcp tp6-tp6-php-fpm-1
关键信息:
容器名称(如
tp6-tp6-php-fpm-1
)端口映射(如
9003:9000
表示宿主机 9003 映射到容器内 9000 端口)
步骤 2:检查容器内 PHP-FPM 是否监听正确端口
进入容器内部,确认 PHP-FPM 实际监听的端口(通常是 9000,而非宿主机的 9003):
# 进入容器(替换容器ID或名称)
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker exec -it tp6-tp6-php-fpm-1 bash# 在容器内执行,检查PHP-FPM监听端口
root@7205b7c455d3:/var/www/html# netstat -tlnp | grep php-fpm
运行结果:
tcp6 0 0 :::9000 :::* LISTEN 1/php-fpm: master p
根据运行结果,就可以确定Docker内部实际监听的端口是9000
在我们的Docker中,有一段代码如下图红框中部分就是用来修改 PHP-FPM 的监听端口,从默认的 9000 端口改为 9003 端口。
s/listen = 9000/listen = 9003/
是替换规则,意思是将所有 "listen = 9000" 字符串替换为 "listen = 9003" ,这里是完全匹配的原则。
再看看容器内的www.conf中的内容,
# 进入容器(替换容器ID或名称)
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker exec -it tp6-tp6-php-fpm-1 bash//编辑www.conf文件
root@7205b7c455d3:/usr/local/etc/php-fpm.d# vim /usr/local/etc/php-fpm.d/www.conf
如下图:
这里可以看到文件 中是 listen = 127.0.0.1:9000,按照匹配规则,肯定是修改不掉这部分的,所以,我们先临时修改一下(即:进入www.conf文件,修改内容 为 listen = 9003 保存退出)
ctrl + PQ键退出容器
# 重启容器(会自动加载修改后的配置)
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker restart tp6-tp6-php-fpm-1
等待5秒,再次进入容器,检查PHP-FPM监听的端口
# 进入容器(替换容器ID或名称)
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker exec -it tp6-tp6-php-fpm-1 bash# 在容器内执行,检查PHP-FPM监听端口
root@7205b7c455d3:/var/www/html# netstat -tlnp | grep php-fpm
运行结果:
还是9000,可能存在多个配置文件:
#容器内直接搜索配置文件中的 listen 配置,查看都有哪些配置文件监听了9000端口
grep -r "listen = " /usr/local/etc/php-fpm.d/
运行结果:
这里看到以.conf结尾的文件有两个一个www.conf,一个是zz-docker.conf,zz-docker.conf文件中监听了9000端口,我们把这个也修改一下试试。
#修改配置文件listen = 9000 为 listen = 9003
vim /usr/local/etc/php-fpm.d/zz-docker.conf
退出容器,重启容器
ctrl + PQ键退出容器
#重启容器
docker restart tp6-tp6-php-fpm-1
等待5秒,再次进入容器,检查PHP-FPM监听的端口
# 进入容器(替换容器ID或名称)
[root@iZ2ze8he63z0zt6g8kiae2Z tp6]# docker exec -it tp6-tp6-php-fpm-1 bash# 在容器内执行,检查PHP-FPM监听端口
root@7205b7c455d3:/var/www/html# netstat -tlnp | grep php-fpm
运行结果如下图:
监听接口正确了,我们再尝试打开网址,这时候显示404错误。
十月一了,放假休息,放假回来我再补充404错误的解决步骤!