在现有 Node.js docker 图像中安装 ffmpeg
ffmpeg install within existing Node.js docker image
我需要在 Node.js 应用程序中使用 ffmpeg,该应用程序在 docker 容器(使用 docker-compose 创建)中运行。我是 Docker 的新手,想知道如何在创建图像时命令 Docker 安装 ffmpeg。
Docker文件
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"
}
}
docker-compose.yml:
version: "2"
services:
web:
volumes:
- "./app:/src/app"
build: .
command: npm run dev
ports:
- "3000:3000"
- "5858:5858"
如果对任何人有帮助,我想出了一个办法。
- 通过将条目添加到 package.json
"ffmpeg-static": "^2.3.0"
使用 ffmpeg-static,这使得二进制文件在 docker 容器中可用。
- 通过使用
ffmpeg_static = require('ffmpeg-static')
然后在 ffmpeg_static
上检查 path
属性,您可以看到二进制文件在容器中的位置。
- 将此路径添加到 ENV 变量:
ENV PATH="/your/path/to/node_modules/ffmpeg-static/bin/linux/x64:${PATH}"
这对我们有用!拯救我们的答案是 firebase 云函数的类似用例 - 。
ffmpeg-static 可以正常工作,但这意味着每次更改 package.json 或任何高于 package.json 的 COPY 命令时,您都必须等待 npm install 命令重新下载垃圾箱。
还有一个方法,使用multi-stage builds. This method won't require re-downloading or rebuilding ffmpeg. There are prebuilt ffmpeg images at jrottenberg/ffmpeg。
对于 alpine,您的图像将如下所示...
FROM jrottenberg/ffmpeg:3.3-alpine
FROM keymetrics/node:8-alpine
# copy ffmpeg bins from first image
COPY --from=0 / /
相关问题:
如果你在 alpine 上,你可以使用下面的 docker 文件来安装 FFmpeg 包。
FROM node:8.11-alpine
WORKDIR /usr/src/app
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
COPY package*.json /usr/src/app/
RUN npm install
RUN apk update
RUN apk add
RUN apk add ffmpeg
COPY . /usr/src/app
ENV PORT 5000
EXPOSE $PORT
CMD [ "npm", "start" ]
我需要在 Node.js 应用程序中使用 ffmpeg,该应用程序在 docker 容器(使用 docker-compose 创建)中运行。我是 Docker 的新手,想知道如何在创建图像时命令 Docker 安装 ffmpeg。
Docker文件
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"
}
}
docker-compose.yml:
version: "2"
services:
web:
volumes:
- "./app:/src/app"
build: .
command: npm run dev
ports:
- "3000:3000"
- "5858:5858"
如果对任何人有帮助,我想出了一个办法。
- 通过将条目添加到 package.json
"ffmpeg-static": "^2.3.0"
使用 ffmpeg-static,这使得二进制文件在 docker 容器中可用。 - 通过使用
ffmpeg_static = require('ffmpeg-static')
然后在ffmpeg_static
上检查path
属性,您可以看到二进制文件在容器中的位置。 - 将此路径添加到 ENV 变量:
ENV PATH="/your/path/to/node_modules/ffmpeg-static/bin/linux/x64:${PATH}"
这对我们有用!拯救我们的答案是 firebase 云函数的类似用例 -
ffmpeg-static 可以正常工作,但这意味着每次更改 package.json 或任何高于 package.json 的 COPY 命令时,您都必须等待 npm install 命令重新下载垃圾箱。
还有一个方法,使用multi-stage builds. This method won't require re-downloading or rebuilding ffmpeg. There are prebuilt ffmpeg images at jrottenberg/ffmpeg。
对于 alpine,您的图像将如下所示...
FROM jrottenberg/ffmpeg:3.3-alpine
FROM keymetrics/node:8-alpine
# copy ffmpeg bins from first image
COPY --from=0 / /
相关问题:
如果你在 alpine 上,你可以使用下面的 docker 文件来安装 FFmpeg 包。
FROM node:8.11-alpine
WORKDIR /usr/src/app
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
COPY package*.json /usr/src/app/
RUN npm install
RUN apk update
RUN apk add
RUN apk add ffmpeg
COPY . /usr/src/app
ENV PORT 5000
EXPOSE $PORT
CMD [ "npm", "start" ]