开发环境Nginx Docker无法连接PHP Docker,报File not found错误求助
links: - php-dev # 这里明确关联的是php-dev服务
php-dev:
container_name: php-dev
image: php:7.2-fpm-alpine3.7
...
ports:
- 9001:9000 # 主机端口9001映射到容器内部的9000端口
...
### 开发环境Nginx站点配置 ```nginx server { listen 80; server_name trombi.xxx.xyz www.trombi.xxx.xyz; location / { root /usr/share/nginx/trombi.xxx.xyz; index index.html index.htm index.php; try_files $uri $uri/ /index.php$is_args$args; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~* \.PHP$ { fastcgi_index index.php; fastcgi_pass php:9000; # 这里是问题所在! include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/trombi.xxx.xyz/$fastcgi_script_name; } }
Nginx错误日志
2018/05/17 06:59:47 [error] 8#8: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.19.0.5, server: trombi.xxx.xyz, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://172.20.0.4:9000", host: "trombi.xxx.xyz" 172.19.0.5 - - [17/May/2018:06:59:47 +0000] "GET /info.php HTTP/1.1" 404 47 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.97"
解决方案
感谢@Constantin Galbenu的提示,只需要修改Nginx配置中的fastcgi_pass目标地址:
把:
fastcgi_pass php:9000;
修改为:
fastcgi_pass php-dev:9000;
补充说明
php-dev是docker-compose中定义的开发环境PHP服务名称,容器间通信需要用这个服务名来寻址- PHP-FPM容器内部监听的是9000端口,你配置的
9001:9000只是主机到容器的端口映射,容器间通信直接用内部的9000端口即可 - 额外提个小建议:你的
location ~* \.PHP$是匹配大写后缀的请求,建议改成location ~* \.php$,这样能兼容小写的.php后缀请求,避免不必要的访问问题
修改完成后,重启Nginx-Dev容器,就能正常连接到开发环境的PHP-FPM服务了。
内容的提问来源于stack exchange,提问作者Lucien PESLIER
相关产品推荐
相关产品推荐

