由于 kafka 未定义错误,Docker 构建失败

Nik*_*Nik 5 go apache-kafka docker dockerfile confluent-platform

当我尝试构建我们的 go 应用程序时,我们收到以下错误。

=> 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
Run Code Online (Sandbox Code Playgroud)

我的 Docker 文件是

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"]
Run Code Online (Sandbox Code Playgroud)

在我的 kafkaProducer go 文件中,我导入了这个

import (
    "fmt"
    "log"

    "github.com/confluentinc/confluent-kafka-go/kafka"
)
Run Code Online (Sandbox Code Playgroud)

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

The*_*ool 2

所以不知何故,这似乎取决于构建时的 cgo。我设法通过使用 cgo 编译来解决这个问题,但静态链接依赖项。

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"]
Run Code Online (Sandbox Code Playgroud)

我使用了来自他们的存储库的下面的代码来进行测试。这最初给了我你所展示的那种错误。

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"]
Run Code Online (Sandbox Code Playgroud)