在AWS EC2实例运行Docker镜像时遭遇FFmpeg可执行文件未找到错误
在AWS EC2实例运行Docker镜像时遭遇FFmpeg可执行文件未找到错误
嘿,我来帮你捋清楚这个问题!你碰到的FFmpeg找不到的报错,核心原因出在Dockerfile的构建阶段设计上——你在server阶段确实安装了FFmpeg,但最终用来部署的production镜像完全是基于全新的node:latest从头创建的,根本没把之前安装的FFmpeg带到生产镜像里,自然就会提示找不到啦。
给你两个简单可行的修复方案:
方案一:在生产阶段直接安装FFmpeg
修改production阶段的Dockerfile代码,新增FFmpeg的安装步骤,确保生产镜像里自带FFmpeg:
FROM node:latest as production WORKDIR /srv/app # 新增:安装FFmpeg,同时清理apt缓存减小镜像体积 RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/* RUN mkdir /public COPY --from=server /srv/app/dist ./ COPY --from=client /srv/app/dist ./public ENV NODE_ENV=production EXPOSE 5000 CMD ["node", "app.js"]
系统安装的FFmpeg默认路径是/usr/bin/ffmpeg,大部分依赖FFmpeg的Node.js库会自动识别这个路径,不用额外配置。
方案二:基于server阶段构建生产镜像
如果不想重复安装FFmpeg,可以让production阶段直接继承server阶段的镜像,这样之前安装的FFmpeg会直接被带过来,还能节省重复安装Node环境的时间:
# 直接基于server阶段的镜像构建生产环境 FROM server as production WORKDIR /srv/app RUN mkdir /public COPY --from=server /srv/app/dist ./ COPY --from=client /srv/app/dist ./public ENV NODE_ENV=production EXPOSE 5000 CMD ["node", "app.js"]
如果server阶段安装了开发依赖,建议在server阶段的npm install改成npm ci --only=production,减少生产镜像里的冗余文件。
另外补充下:你代码里用的@ffmpeg-installer包,在生产环境下可能因为路径问题无法正常工作,而系统级安装的FFmpeg稳定性更高,也不需要依赖包的路径配置,更适合生产环境使用。
备注:内容来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

