部署API至Cloud Run遇端口监听失败问题求助
问题排查与解决方案
1. 修复index.js的模块引用路径错误
你的index.js位于src目录下,当前引用路径../src/config/config会跳出src目录,导致无法找到配置文件,最终Express服务无法启动,自然不会监听端口。
修改index.js中的引用代码:
// 原错误路径 const api = require("../src/config/config"); // 修改为正确路径 const api = require("./config/config");
2. 确认env-cmd已加入生产依赖
你的Dockerfile使用npm install --omit=dev,如果env-cmd被标记为devDependencies,容器内将无法找到该工具,导致npm run execute执行失败。
- 打开
package.json,将env-cmd从devDependencies移至dependencies:
"dependencies": { "env-cmd": "^10.1.0", // 替换为你使用的实际版本号 // 其他生产依赖... }
- 重新构建镜像,确保依赖安装完整。
3. 本地运行容器验证服务启动
部署前先本地启动容器,排查服务是否能正常运行:
- 构建本地镜像:
docker build -t local-api .
- 运行容器并映射端口:
docker run -p 8080:8080 local-api
- 查看容器日志,确认是否输出
Puerto => 8080和Rest API started succesfully。如果有报错(如模块找不到),根据日志进一步修复。
4. 调整环境变量优先级(可选)
Cloud Run会自动注入PORT环境变量,建议移除.env.dev中的PORT=8080配置,让应用优先使用Cloud Run提供的端口(部署时--port 8080参数会与Cloud Run的PORT变量保持一致),避免本地配置干扰生产环境。
5. 验证Dockerfile的文件复制逻辑
确保本地项目结构与容器内结构匹配,你的Dockerfile中COPY . .会将本地项目根目录的所有文件复制到容器的/src工作目录,最终容器内的正确结构应为:
/src ├─ package.json ├─ src │ ├─ index.js │ ├─ config │ │ └─ config.js │ └─ routes │ └─ start.routes.js └─ ...
如果本地目录结构不符,需调整COPY命令或工作目录设置。
内容的提问来源于stack exchange,提问作者Eliana Chávez Valencia
相关产品推荐
相关产品推荐

