首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >kafka未定义错误导致Docker构建失败

kafka未定义错误导致Docker构建失败
EN

Stack Overflow用户
提问于 2021-08-27 17:56:53
回答 1查看 305关注 0票数 2

当我试图构建我们的go应用程序时,我们得到了下面的错误。

代码语言:javascript
复制
=> ERROR [builder 7/7] RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
 > [builder 7/7] RUN CGO_ENABLED=0 GOOS=linux go build -o myapp:
#14 6.962 # main
#14 6.962 ./kafkaproducer.go:12:12: undefined: kafka.NewProducer
#14 6.962 ./kafkaproducer.go:12:31: undefined: kafka.ConfigMap
#14 6.962 ./kafkaproducer.go:23:10: undefined: kafka.Message
#14 6.962 ./kafkaproducer.go:39:13: undefined: kafka.Message

我的Docker文件是

代码语言:javascript
复制
FROM golang:1.16-alpine AS builder
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go mod tidy
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp
FROM busybox AS prod
COPY --from=builder /app .
CMD ["./myapp"]

在我的kafkaProducer go文件中,我导入了以下内容

代码语言:javascript
复制
import (
    "fmt"
    "log"

    "github.com/confluentinc/confluent-kafka-go/kafka"
)

我的应用程序在本地构建成功,但通过docker构建失败,因为它无法下载kafka依赖项,并抛出未定义的错误。请帮我解决这个问题

EN

回答 1

Stack Overflow用户

发布于 2021-08-28 17:57:49

因此,在构建时,这似乎依赖于cgo。我设法解决了这个问题,方法是使用cgo编译,但要链接依赖项。静态地。

代码语言:javascript
复制
FROM golang AS builder

WORKDIR /app
COPY . .
RUN go mod download && \
    go build -o myapp -ldflags '-linkmode external -w -extldflags "-static"'


# works also with alpine
FROM busybox 

COPY --from=builder /app/myapp myapp
CMD ["./myapp"]

我已经使用下面的代码from their repo进行了测试。这给了我最初你所展示的那种错误。

代码语言:javascript
复制
package main

import (
    "fmt"

    "github.com/confluentinc/confluent-kafka-go/kafka"
)

func main() {

    p, err := kafka.NewProducer(&kafka.ConfigMap{"bootstrap.servers": "localhost"})
    if err != nil {
        panic(err)
    }

    defer p.Close()

    // Delivery report handler for produced messages
    go func() {
        for e := range p.Events() {
            switch ev := e.(type) {
            case *kafka.Message:
                if ev.TopicPartition.Error != nil {
                    fmt.Printf("Delivery failed: %v\n", ev.TopicPartition)
                } else {
                    fmt.Printf("Delivered message to %v\n", ev.TopicPartition)
                }
            }
        }
    }()

    // Produce messages to topic (asynchronously)
    topic := "myTopic"
    for _, word := range []string{"Welcome", "to", "the", "Confluent", "Kafka", "Golang", "client"} {
        p.Produce(&kafka.Message{
            TopicPartition: kafka.TopicPartition{Topic: &topic, Partition: kafka.PartitionAny},
            Value:          []byte(word),
        }, nil)
    }

    // Wait for message deliveries before shutting down
    p.Flush(15 * 1000)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68957644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档