【问题标题】:ffmpeg install within existing Node.js docker imageffmpeg 安装在现有的 Node.js docker 镜像中
【发布时间】:2018-11-14 12:39:32
【问题描述】:

我需要在运行在 docker 容器(使用 docker-compose 创建)中的 Node.js 应用程序中使用 ffmpeg。我对 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"
  }
}

docker-compose.yml:

version: "2"
services:
  web:
    volumes:
    - "./app:/src/app"
    build: .
    command: npm run dev
    ports:
    - "3000:3000"
    - "5858:5858"

【问题讨论】:

    标签: node.js docker ffmpeg docker-compose


    【解决方案1】:

    如果它对任何人有帮助,我想出了一个办法。

    • 通过将条目添加到 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 云功能的类似用例 - here

    【讨论】:

      【解决方案2】:

      ffmpeg-static 可以正常工作,但这意味着每次您更改 package.json 或 package.json 的 COPY 命令之上的任何内容时,您都必须等待 npm install 命令重新下载 bin .

      还有另一种方法,使用multi-stage builds。此方法不需要重新下载或重建 ffmpeg。 jrottenberg/ffmpeg 有预构建的 ffmpeg 图像。

      对于 alpine,您的图像将如下所示...

      FROM jrottenberg/ffmpeg:3.3-alpine
      FROM keymetrics/node:8-alpine
      
      # copy ffmpeg bins from first image
      COPY --from=0 / /
      

      相关问题:Copy ffmpeg bins in multistage docker build

      【讨论】:

        【解决方案3】:

        如果你在 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" ]
        

        【讨论】:

          猜你喜欢
          • 2023-01-10
          • 2018-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          • 1970-01-01
          相关资源
          最近更新 更多