You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Node.js Docker容器调用Laravel API但Postman可正常调用

问题根因

你之前尝试的几个请求地址都不符合Docker容器内网络调用的规则:

  • http://localhost:8088:localhost在node容器内指向node容器自身,该容器未监听8088端口,因此触发连接拒绝
  • http://php:8088:php容器没有开放8088端口,无服务响应该端口请求
  • http://php:9000:9000是php-fpm的FastCGI协议端口,不支持直接接收HTTP请求,因此触发连接重置
    nginx才是处理HTTP请求、转发给php-fpm的入口,同一Docker网桥下的容器可以直接通过服务名+容器内部端口访问。

解决步骤

  1. 使用正确的请求地址
    在node容器内调用API时,地址改为http://nginx/api/products即可。因为nginx容器内部监听80端口,不需要加端口号,服务名nginx会被Docker内部DNS自动解析为对应容器的IP。

  2. 验证连通性(可选)
    可以进入node容器手动验证:

# 进入node容器
docker exec -it next sh
# 安装curl(如果镜像没有自带)
apk add curl
# 测试请求
curl http://nginx/api/products

如果能正常返回JSON数据,说明配置没问题,直接修改Next.js代码里的API请求地址即可。

拓展注意事项

如果你的Next.js同时存在服务端渲染(SSR/SSG/ISR)和客户端渲染(CSR)的请求,需要区分地址:

  • 服务端执行的代码(如getServerSideProps、服务端组件):使用容器内部地址http://nginx/api/xxx
  • 客户端执行的代码(如useEffect、客户端组件):使用宿主机对外暴露的地址http://localhost:8088/api/xxx
    可以通过配置不同环境的环境变量来自动切换两个地址,避免手动修改。

其他排查方向

如果上述方法仍然无法解决,可以按以下步骤排查:

  • 执行docker ps确认nginx容器正常运行,没有退出
  • 执行docker inspect next | grep Networks和docker inspect nginx | grep Networks确认两个容器都在laravel网桥下
  • 查看nginx容器日志docker logs nginx确认请求是否正确转发

内容的提问来源于stack exchange,提问作者pileup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:15:03