在多阶段 docker 构建中复制 ffmpeg bin

Copy ffmpeg bins in multistage docker build

我正在尝试通过多阶段 docker build

安装 ffmpeg

这是包含 ffmpeg 二进制文件的 ffmpeg 图像

FROM jrottenberg/ffmpeg

这是我 运行 我的网络服务器

需要的 pm2 图像
FROM keymetrics/pm2:8-alpine

我将bin复制到当前镜像中,可以看到ffmpeg、ffserver、ffprobe都存在/usr/local/bin。

COPY --from=0 /usr/local /usr/local

复制命令似乎成功了,因为当我以交互方式 运行 容器时,这些文件就存在了。

$# which ffmpeg
/usr/local/bin/ffmpeg

但是,当我尝试 运行 收集垃圾箱时,它说找不到命令。

$# ffmpeg --version
/bin/sh: ffmpeg: not found

出于兼容性原因,您需要使用相同的基础映像是有道理的。我使用的是 jrottenberg/ffmpeg(默认为 ubuntu)。我应该一直使用 jrottenberg/ffmpeg:3.3-alpine 因为我使用的是基于 alpine 的 pm2 图像。

此外,构建 ffmpeg 依赖于一些共享库,因此复制 /usr/local 不足以使其工作。我确信有一个更优雅的解决方案,但我最终只是复制了根目录,这就成功了。

FROM jrottenberg/ffmpeg:3.3-alpine
# copy ffmpeg bins
COPY --from=0 / /
FROM <extension of 3.3-alpine>

我遇到了类似的问题,最终使用支持构建 "static" PIE 二进制文件的 alpine gcc 工具链构建了我自己的没有依赖项的二进制文件。原因是我不想要依赖关系,强化构建并且还支持 ASLR。

https://hub.docker.com/r/mwader/static-ffmpeg/

这个issue好像开了here. And there is some solution for it like this one and this one