在多阶段 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。
这个issue好像开了here. And there is some solution for it like this one and this one。
我正在尝试通过多阶段 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。
这个issue好像开了here. And there is some solution for it like this one and this one。