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

Docker Compose运行Node本地API无法访问,如何测试localhost API?

Docker Compose运行后API无法访问的问题排查与修复

问题根源分析

从你的配置和日志来看,核心有三个问题导致API无法访问:

1. 端口不匹配

你的Node代码实际监听4000端口(PORT = process.env.PORT || 4000),但你尝试访问的是http://localhost:3000/test,端口完全不对。另外Dockerfile里的EXPOSE 3000也和实际运行端口不符,虽然EXPOSE只是声明不影响映射,但会造成配置混淆。

2. Node服务器绑定地址限制

默认app.listen(PORT)会绑定到容器内部的localhost,外部主机根本访问不到这个地址,必须绑定0.0.0.0才能允许外部请求进入容器。

3. 启动脚本路径可能错误

你提供的代码文件是index.js,但Dockerfile的启动命令是node server/index.js,如果你的项目里没有server目录,这会直接导致启动失败(不过日志显示服务器已运行,可能你的实际文件确实在server目录下,建议自行确认)。


具体修复步骤

1. 修改Node服务器绑定地址

在index.js里修改app.listen的绑定地址,让外部能访问:

app.listen(PORT, '0.0.0.0', () => console.log(`Server running on port ${PORT}`));

2. 统一端口配置

选一个固定端口同步所有配置,二选一即可:

  • 若想访问http://localhost:4000/test:
    保持代码端口不变,修改Dockerfile的EXPOSE为4000:

    EXPOSE 4000
    

    Compose里的4000:4000映射无需修改。

  • 若想访问http://localhost:3000/test:
    修改代码里的默认端口:

    const PORT = process.env.PORT || 3000;
    

    修改Compose的端口映射:

    ports:
      - 3000:3000
    

    Dockerfile的EXPOSE 3000无需改动。

3. 确认启动脚本路径

如果你的代码文件在根目录下(不是server子目录),修改Dockerfile的CMD:

CMD ["node", "index.js"]

验证修复

  1. 重新构建镜像:
docker compose build
  1. 启动服务:
docker compose up
  1. 访问对应地址(比如http://localhost:4000/test),就能正常拿到Hello World响应了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:43:10