无法将 GRPC 服务部署到 Cloud Run

问题描述 投票:0回答:1

我尝试在 Cloud Run 上部署用 Go 编写的 gRPC 服务,但我总是在 Cloud Run 上收到此错误消息:

The user-provided container failed to start and listen on the port defined provided by the PORT=5000 environment variable

服务本身在本地运行良好。

我的代码需要更改什么?我在网上看到的所有示例看起来都一样并且它们正在运行(根据作者的说法)。

提前致谢!

更新:

我检查了GCP上的登录,问题出在与数据库的连接上。此步骤

client.Schema.Create(context.Background())
失败,我在日志中收到此消息:
failed creating schema resources: querying server version dial tcp <ip_address>:5432: connect: connection timed out

数据库已连接到Cloud Run

main.go:

client, err := ent.Open("postgres database")
if err != nil {
    log.Fatalf("failed opening connection to postgres: %v", err)
}
defer client.Close()

if err := client.Schema.Create(context.Background()); err != nil {
    log.Fatalf("failed creating schema resources: %v", err)
}

server := grpc.NewServer()

// Register services
// ...
    
lis, err := net.Listen("tcp", ":5000")
if err != nil {
    log.Fatalf("failed listening: %s", err)
}

if err := server.Serve(lis); err != nil {
    log.Fatalf("server ended: %s", err)
}

Dockerfile:

FROM golang:1.21

WORKDIR /app

COPY go.mod go.sum ./
RUN go mod download

COPY . ./

RUN CGO_ENABLED=0 GOOS=linux go build -o /pm_backend

EXPOSE 5000

CMD ["/pm_backend"]

云运行设置:

port google-cloud-run grpc-go
1个回答
0
投票

The user-provided container failed to start and listen on the port defined provided by the PORT=5000 environment variable

该错误明确表明特定定义的传入 HTTP 请求端口存在问题,并且容器无法侦听预期端口。

您需要查看Cloud Run 排查官方文档

中的建议进行排查

要解决此问题,请排除以下潜在原因:

  1. 验证您是否可以在本地运行容器映像。如果您的容器镜像无法在本地运行,您需要诊断并修复 首先在本地发布。
  2. 检查您的容器是否正在侦听容器运行时合同中记录的预期端口上的请求。你的容器 必须侦听云定义的端口上的传入请求 运行并在 PORT 环境变量中提供。请参阅配置 有关如何指定端口的说明的容器。
  3. 检查您的容器是否正在侦听所有网络接口,通常表示为 0.0.0.0。
  4. 验证您的容器映像是否按照容器运行时合同的要求针对 64 位 Linux 进行编译。
  5. 使用 Cloud Logging 在 stdout 或 stderr 日志中查找应用程序错误。您还可以查找错误中捕获的崩溃 报告。

根据您的错误日志消息:

failed creating schema resources: querying server version dial tcp <ip\_address\>:5432: connect: connection timed out
正如 @John Henley 在评论中建议的那样,您似乎正在指定 IP 地址作为连接字符串。但正如 Documentation 中所建议的,您需要使用 Unix 套接字。另外,正如 @Boris BRESCIANI 的评论,您可以参考 github 有关与 unix 套接字连接的示例。

© www.soinside.com 2019 - 2024. All rights reserved.