部署Node-TypeScript-Express应用至Cloud Run时端口监听失败求助
部署Node-TypeScript-Express应用到Cloud Run失败:容器未监听指定端口
尝试将容器化的Node-TypeScript-Express应用部署至Google Cloud Run时失败,收到错误提示:The user-provided container failed to start and listen on the port defined provided by the PORT=8080
相关配置信息
Dockerfile配置
FROM node:18.13.0 as base WORKDIR /home/node/app COPY package*.json ./ RUN npm i COPY . . FROM base as production ENV NODE_PATH=./dist RUN npm run build
代码端口声明
const PORT = process.env.PORT || 8080;
package.json配置
{ "name": "weather-service", "version": "0.0.0", "description": "small node server that fetches openweather api data", "engines": { "node": ">= 18.12 <19" }, "scripts": { "start": "NODE_PATH=./dist node dist/src/index.js", "clean": "rimraf coverage dist tmp", "dev": "ts-node-dev -r tsconfig-paths/register src/index.ts", "prebuild": "npm run lint", "build": "ttsc -p tsconfig.release.json", "build:watch": "ttsc -w -p tsconfig.release.json", "build:release": "npm run clean && ttsc -p tsconfig.release.json", "test": "jest --coverage --detectOpenHandles --forceExit", "test:watch": "jest --watch --detectOpenHandles --forceExit", "lint": "eslint . --ext .ts --ext .mts && tsc", "lint:fix": "eslint . --ext .ts --ext .mts", "prettier": "prettier --config .prettierrc --write .", "prepare": "husky install", "pre-commit": "lint-staged" } }
docker-compose系列配置
docker-compose.yml
version: '3.7' services: weather-service: build: context: . dockerfile: Dockerfile target: base volumes: - ./src:/home/node/app/src container_name: weather-service expose: - '8080' ports: - '8080:8080' command: npm run dev
docker-compose.prod.yml
version: '3.7' services: weather-service: build: target: production command: npm run start
docker-compose.dev.yml
version: '3.7' services: weather-service: env_file: - .env environment: - ${PORT} - ${WEATHER_API_KEY}
Makefile配置
up: docker-compose -f docker-compose.yml -f docker-compose.dev.yml up up-prod: docker-compose -f docker-compose.yml -f docker-compose.prod.yml up down: docker-compose down build: docker-compose build
已尝试的排查操作
- 曾在.env文件设置端口,后删除该配置(因Cloud Run会自动注入PORT环境变量)
- 手动将代码端口设置为固定值
- 指定非8080的其他端口进行部署
- 通过本地
docker-compose build构建镜像,打标签后上传至GCP容器仓库
目前问题仍未解决,怀疑该错误提示为通用报错,不确定是否真的是端口监听问题。
内容的提问来源于stack exchange,提问作者1sentenced
相关产品推荐
相关产品推荐

