MAC系统的Docker中访问宿主机php端口
文章目录
今天莫名奇妙的发现电脑上的openresty启动不起来了,提示invalid PID number "" in "/opt/homebrew/var/run/openresty.pid"
,卸载重装依然同样的问题。
临时通过docker装了一个openresty访问宿主机IP时候问了ChatGPT,给的(错误)答复是:
要让 Docker 中的 Nginx 调用宿主机上的 PHP-FPM(运行在 9000 端口),你需要在 Nginx 的配置中使用 fastcgi_pass
指向宿主机的 IP 地址或特殊的 Docker 网关 IP。以下是步骤:
1. 获取宿主机的 IP 地址
在 Docker 容器中,宿主机的 IP 通常是 host.docker.internal
(适用于 Docker Desktop),或者是 Docker 网关 IP 172.17.0.1
(取决于你的 Docker 网络配置)。
如果你使用的是 Linux 宿主机,host.docker.internal
可能不可用,建议使用 Docker 网关 IP。
2. 配置 Nginx
在你的 Docker 容器中,Nginx 的配置文件通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
。找到相应的 server
块并添加或修改如下内容:
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
# 指向宿主机的 PHP-FPM
fastcgi_pass 172.17.0.1:9000; # 宿主机 IP 和端口号
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
3. 验证配置
在 Nginx 容器中运行以下命令以验证 Nginx 配置文件是否正确:
nginx -t
如果配置没有问题,重新加载 Nginx:
nginx -s reload
注意事项
- 端口映射:确保你的 PHP-FPM 在宿主机上的 9000 端口开放,并且 Docker 容器能访问到这个端口。
- 防火墙:如果宿主机上有防火墙,确保允许 Docker 容器访问 9000 端口。
- 网络配置:如果你使用自定义 Docker 网络,可能需要根据网络配置来调整宿主机的 IP 地址。
这应该可以让 Docker 中的 Nginx 调用宿主机上的 PHP-FPM 处理 PHP 请求。
最终解决方案
upstream MASTER_PHP {
least_conn;
server host.docker.internal:9000 weight=1 max_fails=2 fail_timeout=30s;
keepalive 10;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass MASTER_PHP;
fastcgi_index index.php;
include /etc/nginx/fastcgi.conf;
}
参考资料
文章作者 pengxiaochao
上次更新 2024-10-15
许可协议 不允许任何形式转载。