我对云跑很陌生。我创建了一个非常简单的express服务器,如下所示,没有Dockerfile
,因为我决定从源代码部署。
import dotenv from 'dotenv';
dotenv.config();
import express from 'express';
const app = express();
const port = process.env.PORT || 8000;
app.get('/test', (req, res) => {
return res.json({ message: 'test' });
})
app.listen(port, async function () {
console.log(`Sample Service running on port ${port} in ${process.env.NODE_ENV} mode`);
});
请注意,我是从源代码部署的,因此在我的目录中没有Dockerfile
。
gcloud run deploy --source .
然后我不断返回的错误是:
用户提供的容器在port =8080环境变量定义的端口上启动和侦听失败。此版本的日志可能包含更多信息。
我不知道PORT 8080
来自哪里,因为我在听PORT 8000
而不是8080。
如何解决这个问题?
感谢问题很可能与端口无关,而是与导致容器在启动时失败的其他问题有关。我的建议如下:
- 在Google云控制台中访问Cloud Run,对于这个特定的服务,转到Cloud Run服务详细信息本身的日志。它应该告诉您容器启动失败的确切原因。有时,它可能是一个依赖项,一个丢失的命令,等等。
对于正在使用的端口8080,而不是8000——Cloud Run注入一个默认端口8080。请查看容器合同文档。您可以通过在gcloud命令中指定--port
参数来覆盖它,但此时可能没有必要。