登录
首页 >  Golang >  Go问答

找不到符号__isnan的Alpine docker镜像

来源:stackoverflow

时间:2024-02-10 10:27:23 476浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《找不到符号__isnan的Alpine docker镜像》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

这是我用来构建 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 容器中运行工作程序时收到的错误

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

有人可以建议这里出了什么问题并解决它吗?

我在worker中使用汇合的kafka,这可能是此错误的原因。


正确答案


有人可以建议这里出了什么问题并解决它吗?

你在这里做什么:

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

假装 Musl 是 GLIBC。事实并非如此,而且这也行不通。

来自 Musl FAQ

二进制兼容性受到更多限制,但随着 musl 的新版本,它会稳步提高。目前,一些 glibc 链接的共享库可以使用 musl 加载,但如果将 musl 替换为 /lib/ld-linux.so.2,那么除了最简单的 glibc 链接应用程序之外的所有应用程序都将失败。

您应该针对 Musl 构建它,而不是针对 GLIBC 构建 worker 二进制文件,然后尝试使用 Musl 运行它。

以上就是《找不到符号__isnan的Alpine docker镜像》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>