gpt4 book ai didi

docker - Go 应用程序在 Docker 中挂起

转载 作者:行者123 更新时间:2023-12-01 22:29:27 25 4
gpt4 key购买 nike

我有一个非常简单的 go 应用程序,可以在 Windows 和 Mac 下正常工作。 (顺便说一句,我是一个 golang 新手)。该应用程序的目的是订阅 google cloud pubsub 订阅并使用 REST 将消息转发到另一个应用程序。

代码如下所示:

func getOrCreateTopic() {
log.Infof("1")
ctx := context.Background()

log.Infof("2")
topicName := viper.GetString("gce.pubsub.topic")
log.Infof("3")
topic = client.Topic(topicName)
log.Infof("4")
exists, _ := topic.Exists(ctx)
log.Infof("5")
if topic == nil || !exists {
topic, err = client.CreateTopic(ctx, topicName)
if err != nil {
log.Errorf("Failed to create topic %s: %v", topicName, err)
os.Exit(2)
}
}
}

func main() {
...
getOrCreateTopic();
...
}

我创建了一个 docker 容器并将其发布到我们在谷歌云中的 kubernetes 集群。我在日志中看到的是“4”之前的所有内容,然后仅此而已。但是该过程仍然显示为在 kubernetes 中运行。

我迷路了,似乎对 API 的调用只是挂起。

最佳答案

如果其他人遇到同样的问题,我可以使用 OP 中的链接解决它。但是,我第一次看到这个链接时就看过去了,因为它提到了使用云 pubsub 模拟器。

我没有在我的项目中使用 pubsub 模拟器,所以我继续阅读,直到我到达关于 SSL 证书的部分。 SSL证书的缺失是挂起功能的根本原因。

我正在使用 scratch我的项目中的 docker 镜像,默认情况下不包含 ssl 证书。我能够通过在我的多阶段构建中从我的 golang 构建镜像中复制 ssl 证书来解决挂起的代码。

FROM golang
COPY ./ /go/src/app
WORKDIR /go/src/app
RUN CGO_ENABLED=0 GOOS=linux go build -o /build/main

FROM scratch
COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=0 /build/main /main
CMD ["/main"]

ps:我知道这篇文章很旧,但我几乎错过了解决方案,所以我想帮助其他可能在 future 遇到这个问题的人。

关于docker - Go 应用程序在 Docker 中挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com