Docker alpine:尽管在 Dockerfile 中使用 apk 安装了 ffmpeg,但未找到 ffprobe

Har*_*maz 2 ffmpeg docker alpine-linux

ffmpeg我有一个可以执行和命令的 Go 程序ffprobe,因此我需要将它们安装在我的 Docker 容器中。

这是我的 Dockerfile:

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
RUN apk upgrade
RUN apk add --no-cache ffmpeg

FROM alpine
COPY --from=0 /src/server /usr/bin/server
CMD ["server"]
Run Code Online (Sandbox Code Playgroud)

但是,当我运行容器时,它说:

exec: "ffprobe": executable file not found in $PATH
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

Cha*_*ffy 6

因为 ffmpeg 是运行时依赖项,而不是构建工具,所以您必须将其添加到该FROM alpine部分中,而不是该FROM golang:1.17.7-alpine部分中,这样它就安装在您的服务器实际运行的映像上,而不是您的服务器编译所针对的系统映像上。

那么,对原始代码进行最小的更改即可使其正常工作,只需移动行即可,无需进一步更改任何内容:

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

FROM alpine
RUN apk update
RUN apk upgrade
RUN apk add --no-cache ffmpeg
COPY --from=0 /src/server /usr/bin/server
CMD ["server"]
Run Code Online (Sandbox Code Playgroud)