在golang:alpine环境构建含ImageMagick的Go服务Docker镜像报错如何解决
问题根因
- 构建阶段未安装
pkg-config工具和ImageMagick开发依赖,Go调用ImageMagick的CGO绑定需要对应的头文件、链接配置,缺失依赖就会触发你遇到的pkg-config相关报错 - 最终运行镜像也未安装ImageMagick运行时依赖,就算构建成功程序运行时也会找不到动态库报错
修复后的Dockerfile
FROM golang:alpine AS build # 新增安装pkgconfig、imagemagick开发依赖 RUN apk --no-cache add gcc g++ make git pkgconfig imagemagick-dev WORKDIR /go/src/app COPY go.mod . COPY go.sum . RUN go mod download COPY . . # 显式开启CGO,因为调用ImageMagick依赖CGO能力 RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-s -w" -o ./bin/web-app ./main.go FROM alpine:3.13 # 新增安装imagemagick运行时依赖 RUN apk --no-cache add ca-certificates imagemagick WORKDIR /usr/bin COPY --from=build /go/src/app/bin /go/bin EXPOSE 1000 ENTRYPOINT /go/bin/web-app --port 1000
补充适配说明
- 如果你使用的Go ImageMagick绑定库仅支持ImageMagick 6.x版本,将构建阶段的
imagemagick-dev替换为imagemagick6-dev,运行阶段的imagemagick替换为imagemagick6即可 - 若仍提示找不到Magick相关配置,可以在构建命令前新增环境变量
ENV PKG_CONFIG_PATH=/usr/lib/pkgconfig指定pkg-config的检索路径
内容的提问来源于stack exchange,提问作者Muyingo Steven
相关产品推荐
相关产品推荐

