ffmpeg установить в существующем образе докера Node.js - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно использовать ffmpeg в приложении Node.js, которое выполняется в контейнере Docker (созданном с помощью 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"
  }
}

docker-compose.yml:

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

Ответы [ 2 ]

0 голосов
/ 16 августа 2018

ffmpeg-static будет работать нормально, но это означает, что каждый раз, когда вы изменяете package.json или что-либо выше команды COPY для package.json, вам придется ждать, пока команда npm install повторно загрузит корзины.

Существует еще один метод, использующий многоступенчатые сборки .Этот метод не требует повторной загрузки или перекомпоновки ffmpeg.Есть готовые изображения ffmpeg в jrottenberg / ffmpeg .

Для alpine ваше изображение будет выглядеть следующим образом ...

FROM jrottenberg/ffmpeg:3.3-alpine
FROM keymetrics/node:8-alpine

# copy ffmpeg bins from first image
COPY --from=0 / /

Смежный вопрос: Копирование бинов ffmpeg в сборку многоступенчатого докера

0 голосов
/ 07 июня 2018

Если это кому-нибудь поможет, я придумала способ.

  • Используйте ffmpeg-static, добавив запись в package.json "ffmpeg-static": "^2.3.0", это сделает двоичные файлы доступными в контейнере Docker.
  • Используя ffmpeg_static = require('ffmpeg-static') и затем проверяя свойство path в ffmpeg_static, вы можете увидеть, где находятся двоичные файлы в контейнере.
  • Добавить этот путь в переменную ENV: ENV PATH="/your/path/to/node_modules/ffmpeg-static/bin/linux/x64:${PATH}"

Это сработало для нас!Ответ, который спас нас, был аналогичным примером использования облачных функций Firebase - здесь .

...