我需要在一个在docker容器中运行的Node.js应用程序中使用ffmpeg(使用docker-compose创建)。我对Docker很新,并且想知道在创建映像时如何命令Docker安装ffmpeg。
DockerFile
FROM node:carbon
WORKDIR /usr/src/app
# where available (npm@5+)
COPY package*.json ./
RUN npm install -g nodemon
RUN npm install --only=production
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
的package.json:
{
"name": "radcast-apis",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon --inspect-brk=0.0.0.0:5858 ./bin/www"
},
"dependencies": {
"audioconcat": "^0.1.3",
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.16.0",
"firebase-admin": "^5.12.1",
"http-errors": "~1.6.2",
"jade": "~1.11.0",
"morgan": "~1.9.0"
},
"devDependencies": {
"nodemon": "^1.11.0"
}
}
搬运工-compose.yml:
version: "2"
services:
web:
volumes:
- "./app:/src/app"
build: .
command: npm run dev
ports:
- "3000:3000"
- "5858:5858"
答案 0 :(得分:2)
如果它对任何人有帮助,我想出办法。
"ffmpeg-static": "^2.3.0"
来使用ffmpeg-static,这使得二进制文件在docker容器中可用。 ffmpeg_static = require('ffmpeg-static')
然后检查path
上的ffmpeg_static
属性,可以看到二进制文件在容器中的位置。ENV PATH="/your/path/to/node_modules/ffmpeg-static/bin/linux/x64:${PATH}"
这对我们起了作用!拯救我们的答案是firebase云功能的类似用例 - here。
答案 1 :(得分:2)
ffmpeg-static可以正常工作,但这意味着每次更改package.json或package.json的COPY命令上方的任何内容时,您都必须等待npm install命令重新下载垃圾箱
还有另一种方法,使用multi-stage builds。此方法不需要重新下载或重建ffmpeg。 jrottenberg/ffmpeg中有预构建的ffmpeg图像。
对于高山,您的图像看起来像这样...
FROM jrottenberg/ffmpeg:3.3-alpine
FROM keymetrics/node:8-alpine
# copy ffmpeg bins from first image
COPY --from=0 / /