使用 docker 部署 nginx 和 PHP 遇到 502 报错
问题:
我在使用docker
部署php
环境, 访问 .php
文件时,报502
错误。
目前的现状:
- 访问
.php
后缀的文件,均报502
错误,并有以下错误日志connect() failed (111: Connection refused) while connecting to upstream
- 访问
.html
后缀的文件, 正常输出页面 - 在启动的
php
容器里,执行php index.php
, 正常输出内容
我的环境和执行脚本:
docker-compose.yml
services : php: image: 'php:7.2.5-fpm' container_name: php volumes: - ~/nginx/www:/www - ~/nginx/php-db.sh:/nginx/php-db.sh tty: true ports: - "9000:9000" entrypoint: - /bin/bash - /nginx/php-db.sh networks: - laravel nginx: image: 'nginx' container_name: nginx ports: - "80:80" volumes: - ~/nginx/www:/usr/share/nginx/html - ~/nginx/conf.d:/etc/nginx/conf.d depends_on: - php networks: - laravel networks: laravel:
nginx 相关的配置文件
server { listen 80; server_name api.laravel.test; root /usr/share/nginx/html/app/public; index index.php index.html index.htm; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico {access_log off; log_not_found off;} location = /robots.txt {access_log off; log_not_found off;} error_page 404 /index.php; location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/app/public/$fastcgi_script_name; include fastcgi_params; } location ~/\.(?!well-know).*{ deny all; } }
求助:
希望有了解的朋友,可以给我一些思路和排查方法
nginx能访问到php吗?在nginx容器里面ping一下php容器试试
我觉得应该是你nginx容器访问不到php容器的问题,你可以参考一下以下yaml配置文件,PHP容器是我自己build的,其他的基本都差不多 :flushed:
@daijunooo 在 nginx 容器中 ping php 容器,是可以 ping 通的。
nginx 配置加上 include enable-php-pathinfo.conf;
php容器的项目目录和nginx容器的项目目录改成一致的试试
php 那里你写了 entrypoint,你看 entrypoint 怎么写的,telnet php 9000 试试
你的脚本文件请求的路径和你的项目
root
不一样,为什么不用这个:@振翅飞翔
不確定你的發行版,如果在非 Docker 環境下這個狀況可能是 SELinux 把連線擋掉。
近期幾個發行版中,安裝 Docker 的時候都會自動把 SELinux Policy 建進去,理論上會沒有問題。
@振翅飞翔
我推测也是 php-fpm 没起来, 可是我把脚本禁掉, 也不行啊,还是502 。 能不能再给我个思路
github.com/snowlyg/dnmp 其实有写好的直接用就好了,如果是想学习 docker 配置也可以参考。
分享下我这个 dnmp,简单都能看懂。只装需要的扩展。 php容器再 dockerfile 中,里面有些python 啥的如果不用,直接注释那行就行了
github.com/839891627/dnpm
@all ,因为时间的问题和自己对docker 理解还需要深入,我暂时一个容器,一个容器手动启动了,没有用 docker-compose 。等项目稳定了,我会继续反馈这个问题的解决方案。也希望大家继续给予指导,我会及时反馈效果
老铁, 问题解决了吗?我也是排查半天没找到原因所在啊
访问 502 页面
docker logs (项目名称)_nginx_1 --tail 10
检查 log 中upstream:
地址是否与docker-compose exec nginx ping php
中的地址一致,若不一致,重启 nginx 容器docker-compose restart nginx
参考 blog.csdn.net/meibo69631310/articl... 已解决!
问题的根源应该是nginx容器跟php容器的IP没对应上,上面有兄弟指出来了。 我的解决办法是
先启动PHP,后启动nignx,让nginx可以找到php的IP