几天前,我的 Google Cloud API 开始返回 403 错误。
rpc error: code = PermissionDenied desc = unexpected HTTP status code received from server: 403 (Forbidden); transport: received unexpected content-type "text/html; charset=UTF-8"
我将 Logging API 和 Vertex API 与官方 Go 客户端一起使用。
有线部分是当我在同一服务器上运行它而不使用 Docker 时,它工作得很好。另外,当我在 Docker 中的其他服务器上运行它时,它也工作正常。 我不知道我当前的服务器有什么问题。
我创建了最小的程序来重现该错误:
package main
import (
"context"
"fmt"
"log"
"os"
"cloud.google.com/go/logging"
)
func main() {
projectID := os.Getenv("GOOGLE_LOGGING_PROJECT_ID")
logName := os.Getenv("GOOGLE_LOGGING_LOG_NAME")
ctx := context.Background()
client, err := logging.NewClient(ctx, projectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
logInfo := client.Logger(logName)
err = logInfo.LogSync(ctx, logging.Entry{
Payload: "This is a test log message",
})
if err != nil {
log.Fatalf("Failed to log message: %v", err)
}
fmt.Println("Logged message to Google Cloud Logging")
}
并且使用 sh 文件可以正常工作:
#!/bin/sh
export GOOGLE_APPLICATION_CREDENTIALS=google-credentials.json
export GOOGLE_LOGGING_PROJECT_ID=summ-435417
export GOOGLE_LOGGING_LOG_NAME=main
./gce_log_test
但在 Docker 中则不然
version: "3.8"
services:
gce-test:
image: golang:alpine
container_name: gce-test
environment:
- GOOGLE_APPLICATION_CREDENTIALS=/home/app/google-credentials.json
- GOOGLE_LOGGING_PROJECT_ID=summ-435417
- GOOGLE_LOGGING_LOG_NAME=main
volumes:
- /home/summ/gce-test:/home/app
working_dir: /home/app
command: ["./gce_log_test"]
也许 docker 中的 403 错误可能是由于您的服务帐户权限不正确或环境变量设置不正确造成的。尝试仔细检查服务帐户是否具有“日志编写者”角色,并且凭证文件是否已正确安装在 Docker 容器内。