我尝试将我的API部署到Cloud Run,但遇到此错误
ERROR: (gcloud.run.deploy) The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
这是我的Dockerfile
FROM node:lts
WORKDIR /src
COPY package.json package*.json ./
RUN npm install --omit=dev
COPY . .
CMD [ "npm", "execute" ]
这是我的package.json脚本
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "env-cmd -x -f ./src/config/env/.env.local nodemon ./src/index.js",
"deploy:dev": "env-cmd -x -f ./src/config/env/.env.dev ./deploy.sh",
"execute": "env-cmd -x -f ./src/config/env/.env.dev node ./src/index.js"
},
这是我的网站
const api = require("../src/config/config");
const port = process.env.PORT || 8080;
console.log("Puerto => ", port);
api.listen(port, () => {
console.log(`Rest API started succesfully`);
});
这是我的配置文件(我正在使用firebase)
const express = require("express");
// Config
const api = express();
api.use(express.json());
// Routes
api.use(require("../routes/start.routes.js"));
module.exports = api;
我有一个包含PORT变量的.env文件
PORT=8080
这些是我执行的命令
gcloud builds submit --tag gcr.io/$GOOGLE_PROJECT_ID/api --project=$GOOGLE_PROJECT_ID
gcloud run deploy api --image gcr.io/$GOOGLE_PROJECT_ID/api --port 8080 --platform managed --region us-central1 --allow-unauthenticated --project=$GOOGLE_PROJECT_ID
我已经遵循了关于类似问题的每一个提示,但没有一个对我有效
我检查了日志,他们只暴露了我在开始时提到的描述,我尝试使用Cloud Run Emulator在本地运行我的项目,它不起作用,但我没有得到足够的信息来找出问题所在。我甚至不明白为什么在Docker容器中,我看到除了8080之外的几个端口,这是应用程序应该监听的端口,然后说部署过程失败
我用的是Windows 11
如果我运行npm run start
,我的API在本地工作正常
[![Docker容器][1]][1] [1]:https://i.stack.imgur.com/mFD8c.png
希望有人能帮帮我!!!
1条答案
按热度按时间c2e8gylq1#
您需要解决此问题
1.使用cloudshell中的命令检查Cloud Run服务的日志
2.检查容器的日志如果容器本身有任何问题,您可以使用该命令
该命令将启动容器并将容器内的端口8080Map到本地计算机的端口8080。请访问http://localhost:8080上的应用。检查控制台输出是否存在任何容器错误。
1.检查您的Cloud Run配置
1.检查应用程序代码
确保API()函数使用的端口变量设置为PORT环境变量的值:
通过该步骤,您可以找到问题,如果您找不到问题,请联系Cloud Run支持团队以获得进一步帮助。