我已经构建好了容器镜像,但是当我尝试使用gcloud
命令行或Cloud控制台部署时,出现以下错误:"容器启动失败。无法启动并侦听由PORT环境变量定义的端口。"
我已经构建好了容器镜像,但是当我尝试使用gcloud
命令行或Cloud控制台部署时,出现以下错误:"容器启动失败。无法启动并侦听由PORT环境变量定义的端口。"
$PORT
环境变量中提供的端口上监听传入的HTTP请求。// index.js
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
// package.json
"engines": {
"node": "16.x"
},
"scripts": {
"start": "node index.js"
},
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
app.run(port=int(os.environ.get("PORT", 8080)),host='0.0.0.0',debug=True)
试试这个,我的可以用。不知何故,你需要更改构建镜像的底层平台。
docker buildx build --platform linux/amd64 -t {project-name} .
tsc
并运行 docker build
,但我认为 gcloud builds submit 将会处理这个并按照 Dockerfile 建议的方式选择已编译的代码,以及.dockerignore文件并构建我的源代码并提交到存储库中。0.0.0.0
,但在本地使用yarn启动应用程序时可以正常工作。可能听起来很傻,但请确保您的容器在本地表现如预期。我在dockerfile中暴露了一个端口,移除后问题自动解决。Google注入PORT环境变量,因此项目将会使用该环境变量。
我们还可以在命令行中指定图像使用的端口号。 如果我们正在使用Cloud Run,可以使用以下命令:
gcloud run deploy --image gcr.io/<PROJECT_ID>/<APP_NAME>:<APP_VERSION> --max-instances=3 --port <PORT_NO>
在哪里
<PROJECT_ID>
是项目 ID<APP_NAME>
是应用程序名称<APP_VERSION>
是应用程序版本<PORT_NO>
是端口号使用以下命令:
docker build -t gcr.io/project-name/image-name
docker push gcr.io/project-name/image-name
gcloud run deploy tag-name --image gcr.io/project-name/image-name
Cloud Run 会生成默认的 YAML 文件,其中硬编码了默认端口:
spec:
containerConcurrency: 80
timeoutSeconds: 300
containers:
- image: us.gcr.io/project-test/express-image:1.0
ports:
- name: http1
containerPort: 8080
resources:
limits:
memory: 256Mi
cpu: 1000m