【问题标题】:Copy ffmpeg bins in multistage docker build在多阶段 docker build 中复制 ffmpeg 箱
【发布时间】:2024-01-03 04:10:01
【问题描述】:

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

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

FROM jrottenberg/ffmpeg

这是我运行网络服务器所需的 pm2 映像

FROM keymetrics/pm2:8-alpine

我将bins复制到当前镜像中,可以看到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

【问题讨论】:

    标签: docker ffmpeg sh alpine


    【解决方案1】:

    出于兼容性原因,您需要使用相同的基本映像是有道理的。我使用的是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>
    

    【讨论】:

    • 您有用于此目的的 Dockerfile 吗?我遇到了同样的问题。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这个问题似乎打开了here。还有一些解决方案,例如this onethis one

      【讨论】:

        最近更新 更多