docker 错误:用户提供的容器无法启动并侦听PORT=8080环境变量提供的定义端口

ecr0jaav  于 2023-02-18  发布在  Docker
关注(0)|答案(1)|浏览(157)

我尝试将我的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
希望有人能帮帮我!!!

c2e8gylq

c2e8gylq1#

您需要解决此问题

1.使用cloudshell中的命令检查Cloud Run服务的日志

gcloud logs read --project $GOOGLE_PROJECT_ID --service api --limit 100

//You can adjust the --limit flag to show more or fewer log entries.

2.检查容器的日志如果容器本身有任何问题,您可以使用该命令

docker run -p 8080:8080 gcr.io/$GOOGLE_PROJECT_ID/api

该命令将启动容器并将容器内的端口8080Map到本地计算机的端口8080。请访问http://localhost:8080上的应用。检查控制台输出是否存在任何容器错误。
1.检查您的Cloud Run配置
1.检查应用程序代码
确保API()函数使用的端口变量设置为PORT环境变量的值:

const port = process.env.PORT || 8080;
api.listen(port, () => {
console.log(`Rest API started successfully`);
});

通过该步骤,您可以找到问题,如果您找不到问题,请联系Cloud Run支持团队以获得进一步帮助。

相关问题