Вот мой Dockerfile:
FROM node:18-slim as builder
WORKDIR /usr/src/ai_api_builder/
COPY package*.json tsconfig.json /usr/src/ai_api_builder/
RUN apt-get update && \
apt-get install mariadb-client -y && \
npm install && npm cache clean --force
RUN apt install ffmpeg -y && \
ffmpeg -version && \
ffprobe -version
COPY ${REPO_DIR}/ ./
RUN npm run build && mv audio_store node_modules dist/
FROM node:18-slim
# Create and cd into app directory
WORKDIR /usr/src/dwt_api_app/dist
# Copy the artifact to the new image
COPY --from=builder /usr/src/dwt_api_builder/dist ./
EXPOSE 3001
ENTRYPOINT ["node", "app.js"]
Когда я собираю Dockerfile, сработала пошаговая проверка версии ffmpeg и ffprobe:
ffmpeg version 5.1.4-0+deb12u1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
...
ffprobe version 5.1.4-0+deb12u1 Copyright (c) 2007-2023 the FFmpeg developers
Но когда я запускаю контейнер, мой код TypeScript не работает (метаданные возвращаются undefined):
import { ffprobe } from "fluent-ffmpeg";
ffprobe(latestFilePath, async function(err: any, metadata: any) {
console.info("metadata", metadata);
})
Когда я запустил контейнер и проверил ffmpeg -version и ffprobe -version, я получил: bash: ffmpeg: command not found. И когда я проверил папку bin, я тоже не смог найти ffmpeg.
Я попробовал это локально (Centos7), а не в контейнере, это сработало (метаданные возвращают объект), и вот версия ffprobe
ffprobe version 6.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2007-2023 the FFmpeg developers <b>
Какой шаг я сделал неправильно при запуске контейнера или есть ли разница между Debian (в контейнере) и Centos 7 (локальной), на которую мне нужно обратить внимание? Спасибо
Я поделился своим полным Dockerfile





Вы установили ffmpeg и ffprobe на этапе builder. Это означает, что эти инструменты недоступны в окончательном изображении.
Чтобы решить вашу проблему, установите эти инструменты на последнем этапе, например:
FROM node:18-slim as builder
WORKDIR /usr/src/ai_api_builder/
COPY package*.json tsconfig.json /usr/src/ai_api_builder/
RUN apt-get update && \
apt-get install mariadb-client -y && \
npm install && npm cache clean --force
COPY ${REPO_DIR}/ ./
RUN npm run build && mv audio_store node_modules dist/
FROM node:18-slim
RUN apt-get update && apt install ffmpeg -y && \
ffmpeg -version && \
ffprobe -version
# Create and cd into app directory
WORKDIR /usr/src/dwt_api_app/dist
# Copy the artifact to the new image
COPY --from=builder /usr/src/dwt_api_builder/dist ./
EXPOSE 3001
ENTRYPOINT ["node", "app.js"]
Подробнее о многоэтапных сборках.
спасибо, это не работает. Могу ли я установить ffmpeg на этапе 1 и скопировать его на этап 2, чтобы оптимизировать размер изображения?
Можно, но, ИМХО, это не будет иметь особого смысла, поскольку таким образом вы не оптимизируете размер изображения.
Похоже, вы устанавливаете ffmpeg на этапе сборки, но пытаетесь использовать его на другом этапе позже. Можете ли вы поделиться полным Dockerfile?