dockerFile 多阶段构建的 golang 二进制包运行提示 No such file or directory

本文介绍了在Dockerfile中使用多阶段构建时,从alpine转换到centos基础镜像后,运行二进制包出现"No such file or directory"错误的原因。问题根源在于不同Linux发行版的C语言标准库差异,如alpine使用musl,而centos使用glibc。解决方案是将第一个镜像中的ld-musl-x86_64.so.1复制到centos镜像的/lib目录,或者创建软链接。
摘要由CSDN通过智能技术生成

由于我们的 Dockerfile 使用多阶段构建,

FROM golang-alpine as build
...

FROM alpine as prod
...

由于 alpine 镜像非常小,只有 5 mb 左右,但是由于客户那边强制要使用红帽的基础镜像,所以在第二阶段修改成红帽的镜像,最终打成的镜像运行的时候会提示 No such file or directory

先说结果

这个问题的原因在于第一阶段构建的环境和第二阶段的运行的环境不一致,很多时候以为都是 Linux 环境,怎么可能不一致呢,但是由于 Linux 的各个发行版都有自己定制化的部分,就譬如 alpine 分支,他的 C 语言动态链接库使用的是 musl,而像 centos 用的都是 glibc,他们都是 c 语言的标准库,用来调用操作系统的库。


上面说的是一方面原因,但是不是这个问题的最具体的原因。

go build 打包出来的二进制文件还写一个非常重要的信息 interpreter
我将二进制文件从容器内 copy 出来通过 file 查看


                
Mac Prometheus 是一种用于监控和警报的开源软件,它提供了广泛的监控功能,可用于监控各种应用程序和服务,括使用 golang 编写的二进制文件。 要在 Mac 上使用 Prometheus 监控 golang 二进制文件,首先需要安装并配置 Prometheus 和相关的组件。可以通过 Homebrew 或手动从 Prometheus 的官方网站下载安装。安装完成后,需要在 Prometheus 的配置文件中指定要监控的目标和指标。 在 golang 二进制文件中,可以通过 Prometheus 客户端库来暴露自定义的指标。该库提供了一组函数,可以在代码中调用,以便将自定义的指标暴露给 Prometheus。这些指标可以是应用程序的各个方面,如请求处理时间、内存占用、并发连接数等等。 一旦 golang 二进制文件中的指标暴露出来,Prometheus 就可以通过配置文件中的目标来收集这些指标。Prometheus 会按照配置的时间间隔定期访问这些目标,收集指标数据并存储起来。你可以使用 Prometheus 的查询语言 PromQL 来分析和查询这些指标数据,并使用 PromQL 表达式设置警报规则。 为了在 Mac 上实现 golang 二进制文件的监控,你需要编写相应的 golang 代码来使用 Prometheus 客户端库暴露指标。然后,在 Prometheus 的配置文件中指定该 golang 二进制文件的地址作为监控目标。最后,启动 Prometheus 服务,并使用 Prometheus 的界面或 API 来查看和管理指标数据。 总之,通过 Mac Prometheus 监控 golang 二进制文件,你可以轻松地收集和分析应用程序的各种指标,并设置警报规则以监控应用程序的健康状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值