Docker部署Node.js Express项目访问根路径提示Cannot GET /如何解决
问题根因
你访问localhost:3000触发的是根路径/的请求,你代码中没有单独定义根路由的处理逻辑,完全依赖express.static('pages')静态资源中间件响应,当前静态资源中间件无法找到对应资源,因此返回Cannot GET /错误,具体原因有两个:
- 容器内的
/app目录下不存在pages文件夹:
你的Dockerfile构建阶段仅复制了package.json和package-lock.json到镜像的/app目录,没有复制本地的pages目录;同时启动容器时仅挂载了本地src目录到容器内的/app/src,如果你的pages目录在本地和src同级,容器内的/app下是没有这个目录的。 - 静态资源路径使用了相对路径,稳定性差:
express.static('pages')的相对路径是相对于Node进程的工作目录(也就是容器内的/app),如果后续工作目录变动也会导致资源找不到。
验证方法
先访问http://localhost:3000/greeting,如果能正常返回hello,说明容器网络、服务运行都是正常的,100%是上述静态资源路径问题。
修复方案
- 如果你需要用静态文件响应根路径:
- 确认本地
app1根目录下存在pages目录,且目录内有index.html文件 - 启动容器时新增
pages目录的挂载参数,完整命令如下:sudo docker run --rm -p 3000:8080 -v /Users/me/Desktop/app1/src:/app/src -v /Users/me/Desktop/app1/pages:/app/pages -it raff/node - (可选优化)修改
server.js中的静态资源路径为绝对路径,避免相对路径带来的问题:// 顶部引入path模块 const path = require('path') // 修改静态资源中间件配置 app.use('/', express.static(path.join(__dirname, '../pages')));
- 确认本地
- 如果你不需要静态文件,只需要单独响应根路径:
直接在server.js中新增根路由的处理逻辑即可:app.get('/', (req,res) => { res.send('根路径访问正常') })
内容的提问来源于stack exchange,提问作者Raffica
相关产品推荐
相关产品推荐

