无法构建opentelemetry-collector-contrib Docker镜像问题咨询
解决OpenTelemetry Collector Contrib镜像构建时找不到otelcontribcol文件的问题
你遇到的报错核心原因是:当前构建目录下没有otelcontribcol可执行文件。这个Dockerfile的逻辑是直接复制已经提前编译好的二进制程序到镜像中,而非在镜像构建流程里自动完成编译。
解决方案一:手动编译后再构建
- 切换到仓库根目录:
cd ~/git/opentelemetry-collector-contrib - 执行编译命令(旧版本通常使用Makefile管理构建):
编译完成后,make otelcontribcolotelcontribcol二进制文件会生成在cmd/otelcontribcol/路径下。 - 回到Dockerfile所在目录重新构建:
cd cmd/otelcontribcol docker build -t opentelemetry-collector .
解决方案二:修改Dockerfile为多阶段构建(自动编译)
如果不想每次手动编译,可以修改Dockerfile,添加编译阶段,让镜像构建过程自动完成二进制编译:
# 第一阶段:用Go镜像编译二进制 FROM golang:1.21-alpine AS builder WORKDIR /workspace # 复制整个仓库代码到构建环境 COPY . . # 可选:设置Go代理加速依赖下载 ENV GOPROXY=https://goproxy.cn # 静态编译,避免alpine镜像缺少依赖 RUN CGO_ENABLED=0 go build -o otelcontribcol ./cmd/otelcontribcol # 第二阶段:用轻量的alpine镜像运行程序 FROM alpine:latest RUN apk --update add ca-certificates && mkdir -p /tmp # 从编译阶段复制二进制文件 COPY --from=builder /workspace/otelcontribcol / EXPOSE 4317 55680 55679 ENTRYPOINT ["/otelcontribcol"]
修改后,直接在仓库根目录或cmd/otelcontribcol目录执行docker build -t opentelemetry-collector .即可,构建流程会自动完成编译。
内容的提问来源于stack exchange,提问作者Birkeburk
相关产品推荐
相关产品推荐

