我正在构建一个处理 Apache Pulsar 的 GO 应用程序。正如 Pulsar 文档所要求的那样,Go 客户端需要 C++ 库(顺便说一句,Kafka 也是如此)。
我想将所有这些打包成一个容器,尽可能最小。我通常使用 SCRATCH 并从另一个基于 golang 的容器中复制输出。不幸的是,我无法从这个初始容器中获取外部库:
FROM golang:latest as builder
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
ARG DOCKER_GIT_CREDENTIALS
WORKDIR /builder
ADD . /builder
RUN git config --global credential.helper store && echo "${DOCKER_GIT_CREDENTIALS}" > ~/.git-credentials
RUN make build
RUN echo $(go list -m) && mv bin/$(go list -m) app
FROM SCRATCH
COPY --from=builder /builder/app app
EXPOSE 8080
ENTRYPOINT ["./app"]
使用它会使构建失败,寻找丢失的符号
/go/pkg/mod/github.com/apache/pulsar/pulsar-client-go@v0.0.0-20200118070759-21660e9402f8/pulsar/client.go:29:9: undefined: newClient
...
而本地构建工作。
如何正确集成我需要的库?