You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:12:47