Docker Alpine容器安装FFmpeg后ffprobe仍找不到,求解决方法
问题原因
你的Dockerfile采用多阶段构建,第一阶段的golang:1.17.7-alpine镜像中确实安装了ffmpeg(包含ffprobe),但切换到第二阶段的alpine基础镜像时,仅复制了编译好的server程序,并未将ffmpeg和ffprobe及其依赖带入最终镜像,导致容器运行时找不到对应可执行文件。
解决方案
方案一:在第二阶段镜像中安装ffmpeg(推荐)
直接在最终的alpine镜像中安装ffmpeg,操作简单且无需手动处理依赖问题:
FROM golang:1.17.7-alpine WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN go build -o ./server cmd/service/main.go # 第一阶段的ffmpeg安装可保留(不影响),也可删除以减少构建时间 RUN apk update && apk upgrade && apk add --no-cache ffmpeg FROM alpine # 关键步骤:在最终镜像中安装ffmpeg,自动包含ffprobe RUN apk update && apk upgrade && apk add --no-cache ffmpeg COPY --from=0 /src/server /usr/bin/server CMD ["server"]
方案二:从第一阶段复制ffmpeg相关文件到第二阶段
若希望避免重复安装以减小镜像体积,可从第一阶段复制ffmpeg、ffprobe二进制文件及依赖库:
FROM golang:1.17.7-alpine WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN go build -o ./server cmd/service/main.go RUN apk update && apk upgrade && apk add --no-cache ffmpeg FROM alpine # 复制ffmpeg和ffprobe二进制文件 COPY --from=0 /usr/bin/ffmpeg /usr/bin/ffmpeg COPY --from=0 /usr/bin/ffprobe /usr/bin/ffprobe # 复制必要的依赖库(可通过在第一阶段执行`ldd /usr/bin/ffmpeg`查看完整依赖列表) COPY --from=0 /usr/lib/libav*.so* /usr/lib/ COPY --from=0 /usr/lib/libsw*.so* /usr/lib/ COPY --from=0 /usr/lib/libpostproc.so* /usr/lib/ COPY --from=0 /usr/lib/libx264.so* /usr/lib/ COPY --from=0 /src/server /usr/bin/server CMD ["server"]
内容的提问来源于stack exchange,提问作者Harun Sasmaz
相关产品推荐
相关产品推荐

