阿尔卑斯码头工人图片__isnan:找不到符号



这是我用来构建Golang应用程序和工作的Dockerfile

FROM golang:1.15 AS build
RUN mkdir -p /go/api/proj
WORKDIR /go/api/proj
COPY go.* ./
RUN go mod download
COPY . .
RUN go mod tidy
RUN go build -o proj ./api/
RUN go build -o worker ./worker/
FROM alpine:3.14
WORKDIR /
RUN apk add libc6-compat cmake
RUN ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2
COPY . .
COPY --from=build /go/api/proj/proj .
COPY --from=build /go/api/proj/worker .
EXPOSE 80
CMD ["./worker"]

我不得不添加libc6-compat,因为worker中的kafka设置与alpine 的musl库不兼容

这是我在docker容器中尝试运行worker时收到的错误

Error relocating ./worker: __strdup: symbol not found
Error relocating ./worker: __isnan: symbol not found
Error relocating ./worker: __strndup: symbol not found

有人能提出这里出了什么问题以及解决方案吗?

我在工人中使用了合流卡夫卡,这可能是这个错误的原因。

有人能提出这里出了什么问题以及解决方案吗?

你在这里做什么:

RUN ln -s /lib/libc.musl-x86_64.so.1 /lib/ld-linux-x86-64.so.2

假装Musl是GLIBC。事实并非如此,也不起作用。

来自Musl常见问题解答:

二进制兼容性要有限得多,但随着musl的新版本,它将稳步增加。目前,一些glibc链接的共享库可以用musl加载,但如果用musl代替/lib/ld-linux.so.2,则除最简单的glibc链接应用程序外,其他所有应用程序都将失败。

与其针对GLIBC构建worker二进制文件,然后尝试使用Musl运行它,不如针对Musl构建它。

相关内容

  • 没有找到相关文章

最新更新